奶牛渡河

题目描述

\(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. 消费者启动,允许期间报task supervisor timed out 异常,解决

    如何解决后端项目启动时抛出 task supervisor timed out 异常 现象描述 后端项目启动时抛出如下异常,但是该后段项目能正常启动并注册到注册中心,不影响功能使用. 2018-10- ...

  2. CentOS7.6操作系统安装实例以及Linux版本、哲学思想介绍

    Linux起源1991年的10月5日,Torvalds在comp.os.minix新闻组上发布消息,正式向外宣布他自行编写的完全自由免费的内核诞生(Freeminix-like kernel sour ...

  3. Apollo移植

    Apollo移植 环境 平台 ubuntu16.04 Apollo_kernel 1.0 安装步骤步骤 步骤一:安装ubuntu(官方建议使用Ubuntu 14.04.3) 步骤一和步骤二参考文档路径 ...

  4. Spark-stream,kafka结合

    先列参考文献: Spark Streaming + Kafka Integration Guide (Kafka broker version 0.10.0 or higher):http://spa ...

  5. 如何在微信小程序中使用阿里字体图标

    第一步:下载需要的字体图标 进入阿里图标官网http://iconfont.cn/搜索自己想要的图标. 如这里需要一个购物车的图标,流程为: 搜索“购物车”图标 --->  点击“添加入库”  ...

  6. linu使用x之sz下载和rz上传

    对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能,但是很多Linux系统初始并没有这两个命令.今天,我们 ...

  7. windows环境下tensorflow安装过程详解

    写在最前: 在安装过程中遇到很多坑,一开始自己从官网下载了Python3.6.3或者Python3.6.5或者Python3.7.1等多个版本,然后直接pip install tensorflow或者 ...

  8. pdb--Python调试器

    使用python编写程序,必然会遇见bug,而pdb就是python语言的一个好的debugger. 下面介绍pdb的使用方式 1. 单步执行代码,通过命令 python -m pdb xxx.py ...

  9. Python中用OpenPyXL处理Excel表格 - 单元格格式设置

    官方文档: http://openpyxl.readthedocs.io/en/default/ OpenPyXL库 --单元格样式设置 单元格样式的控制,依赖openpyxl.style包,其中定义 ...

  10. SpringBoot——项目启动时读取配置及初始化资源

    介绍   在开发过程中,我们有时候会遇到非接口调用而出发程序执行任务的一些场景,比如我们使用quartz定时框架通过配置文件来启动定时任务时,或者一些初始化资源场景等触发的任务执行场景. 方法一:注解 ...