奶牛渡河

题目描述

\(Farmer John\) 以及他的 \(N (1\leq N\leq 2500)\) 头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏。

由于奶牛不会划船,在整个渡河过程中,\(Farmer John\) 必须始终在木筏上。在这个基础上,木筏上的奶牛数目每增加 \(1\) ,\(Farmer John\) 把木筏划到对岸就得花更多的时间。

当\(Farmer John\) 一个人坐在木筏上,他把木筏划到对岸需要\(M (1\leq M\leq 1000)\)分钟。

当木筏搭载的奶牛数目从 \(i-1\) 增加到 \(i\) 时,\(Farmer John\)得多花 \(M_i (1\leq M_i\leq 1000)\) 分钟才能把木筏划过河。

也就是说,船上有 \(1\) 头奶牛时,\(Farmer John\) 得花 \(M+M_1\) 分钟渡河;船上有 \(2\) 头奶牛时,时间就变成 \(M+M_1+M_2\) 分钟。后面的依此类推。

那么,\(Farmer John\) 最少要花多少时间,才能把所有奶牛带到对岸呢?当然,这个时间得包括 \(Farmer John\) 一个人把木筏从对岸划回来接下一批的奶牛的时间。

输入格式

第 \(1\) 行: \(2\) 个用空格隔开的整数:\(N\) 和 \(M\) ;

第 \(2...N+1\) 行: 第 \(i+1\) 为 \(1\) 个整数: \(M_i\) ;

输出格式

第 \(1\) 行: 输出 \(1\) 个整数,为\(Farmer John\)把所有奶牛都载过河所需的最少时间;

样例

样例输入

5 10
3
4
6
100
1

样例输出

50

题目大意:

载船运牛,每载一头牛,运送时间越长,求最短的运送时间。

注意

\(①\) 注意回来的时间。

\(②\) \(M_i\) 指的是船上有 \(i\) 头牛时,增加 \(M_i\) 的时间,而不是第 \(i\) 头牛运的时候需要 \(M_i\) 的时间。

\(③\) 注意加上 \(m\) 本身。

思路

求数组的前缀和,使 \(M_i\) 的值代表船上有 \(i\) 头牛时,运送需要的时间。

决策:直接把这 \(i\) 头牛运过去;

   或者先把 \(j\) 头牛运过去,回来在把剩下的 \(i-j\) 头牛运过去。

动态方程:\(dp[i]=min(dp[i],dp[j]+cow[i-j]+m)\)

代码

#include <bits/stdc++.h>
using namespace std; const int maxn=5000+50;
int n,m;
int Cow[maxn],dp[maxn]; int main(){
cin>>n>>m;
    Cow[0]=m;//算上木筏的时间
    for(int i=1;i<=n;i++){
cin>>Cow[i];
Cow[i]+=Cow[i-1];//求前缀和,便于计算
}
for(int i=1;i<=n;i++){
dp[i]=Cow[i];//初始化
for(int j=0;j<i;j++){
dp[i]=min(dp[i],dp[j]+Cow[i-j]+m);//决策
}
}
cout<<dp[n]<<endl;
return 0;
}

奶牛渡河——线性dp的更多相关文章

  1. 奶牛渡河(dp)

    奶牛渡河 时间限制: 1 Sec  内存限制: 128 MB提交: 36  解决: 27[提交][状态][讨论版][命题人:外部导入][Edit] [TestData] [同步数据] 题目描述 Far ...

  2. 洛谷2344 奶牛抗议(DP+BIT+离散化)

    洛谷2344 奶牛抗议 本题地址:http://www.luogu.org/problem/show?pid=2344 题目背景 Generic Cow Protests, 2011 Feb 题目描述 ...

  3. LightOJ1044 Palindrome Partitioning(区间DP+线性DP)

    问题问的是最少可以把一个字符串分成几段,使每段都是回文串. 一开始想直接区间DP,dp[i][j]表示子串[i,j]的答案,不过字符串长度1000,100W个状态,一个状态从多个状态转移来的,转移的时 ...

  4. Codeforces 176B (线性DP+字符串)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...

  5. hdu1712 线性dp

    //Accepted 400 KB 109 ms //dp线性 //dp[i][j]=max(dp[i-1][k]+a[i][j-k]) //在前i门课上花j天得到的最大分数,等于max(在前i-1门 ...

  6. 动态规划——线性dp

    我们在解决一些线性区间上的最优化问题的时候,往往也能够利用到动态规划的思想,这种问题可以叫做线性dp.在这篇文章中,我们将讨论有关线性dp的一些问题. 在有关线性dp问题中,有着几个比较经典而基础的模 ...

  7. POJ 2479-Maximum sum(线性dp)

    Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33918   Accepted: 10504 Des ...

  8. poj 1050 To the Max(线性dp)

    题目链接:http://poj.org/problem?id=1050 思路分析: 该题目为经典的最大子矩阵和问题,属于线性dp问题:最大子矩阵为最大连续子段和的推广情况,最大连续子段和为一维问题,而 ...

  9. nyoj44 子串和 线性DP

    线性DP经典题. dp[i]表示以i为结尾最大连续和,状态转移方程dp[i] = max (a[i] , dp[i - 1] + a[i]) AC代码: #include<cstdio> ...

随机推荐

  1. 【工作Vlog】Jmeter响应结果乱码解决方案

    资料:https://blog.51cto.com/ydhome/1864340 方法一:使用后置控制器"Beanshell PostProcessor"(动态修改,灵活) 添加后 ...

  2. [RH134] 12-系统启动

    1.系统启动流程 开机--->BIOS自检(需要检测的设备是否正常)--->磁盘的MBR分区--->BootLoader(引导加载器)加载内核--->识别各分区的文件系统 2. ...

  3. MySQL死锁及解决方案

    一.MySQL锁类型 1. MySQL常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表 ...

  4. 如何在交互式环境中执行Python程序

    相信接触过Python的小伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同的操作平台上还互不相同.今天,小编讲些Pyth ...

  5. tensorflow2.0学习笔记第二章第二节

    2.2复杂度和学习率 指数衰减学习率可以先用较大的学习率,快速得到较优解,然后逐步减少学习率,使得模型在训练后期稳定指数衰减学习率 = 初始学习率 * 学习率衰减率^(当前轮数/多少轮衰减一次) 空间 ...

  6. 面试官:换人!他连 TCP 这几个参数都不懂

    每日一句英语学习,每天进步一点点: 前言 TCP 性能的提升不仅考察 TCP 的理论知识,还考察了对于操心系统提供的内核参数的理解与应用. TCP 协议是由操作系统实现,所以操作系统提供了不少调节 T ...

  7. Kubernetes内部域名解析的那些事儿

    前言 在kubernets环境中,服务发现大都是基于内部域名的方式.那么就涉及到内部域名的解析.从1.11版本开始,kubeadm已经使用第三方的CoreDNS替换官方的kubedns作为集群内部域名 ...

  8. LiveCharts 提示框(DataTooltip)百分比一直为0.00%解决办法

    LiveCharts 提示框(DataTooltip)百分比一直为0.00%解决办法 问题描述:在使用LiveCharts 开源图标库的时候,使用CartesianChart类图表,当Series为L ...

  9. vue2.0 + Element UI + axios实现表格分页

    注:本文分页组件用原生 html + css 实现,element-ui里有专门的分页组件可以不用自己写,详情见另一篇博客:https://www.cnblogs.com/zdd2017/p/1115 ...

  10. 【Jmeter】日常骚操作最简洁上传和下载

    上传文件或图片 第一步:正常填写域名地址,请求头及路径(此处不过多讲解) 第二步:http请求中,高级设置——Implementation(翻译:实现)值选择修改为:java 第三步:查看结果树请求成 ...