http://www.lydsy.com/JudgeOnline/problem.php?id=1617

裸dp,很好做。

设f[i]表示i头牛到对岸所需最小时间。sum[i]表示运i头牛到对岸的时间(包括自己)

f[i]=min(f[j]+sum[i-j]+m) 0<=j<i

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << #x << " = " << x << endl
#define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; }const int N=3000;
int sum[N], f[N], m, n;int main() {read(n); read(m);sum[0]=m;for1(i, 1, n) { int t=getint(); sum[i]=sum[i-1]+t; }for1(i, 1, n) f[i]=~0u>>1;for1(i, 1, n)for1(j, 0, i-1)f[i]=min(f[i], f[j]+m+sum[i-j]);print(f[n]-m);return 0;
}


Description

Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏。 由于奶牛不会划船,在整个渡河过程中,FJ必须始终在木筏上。在这个基础上,木筏上的奶牛数目每增加1,FJ把木筏划到对岸就得花更多的时间。 当FJ一个人坐在木筏上,他把木筏划到对岸需要M(1 <= M <= 1000)分钟。当木筏搭载的奶牛数目从i-1增加到i时,FJ得多花M_i(1 <= M_i <= 1000)分钟才能把木筏划过河(也就是说,船上有1头奶牛时,FJ得花M+M_1分钟渡河;船上有2头奶牛时,时间就变成M+M_1+M_2分钟。后面 的依此类推)。那么,FJ最少要花多少时间,才能把所有奶牛带到对岸呢?当然,这个时间得包括FJ一个人把木筏从对岸划回来接下一批的奶牛的时间。

Input

* 第1行: 2个用空格隔开的整数:N 和 M

* 第2..N+1行: 第i+1为1个整数:M_i

Output

* 第1行: 输出1个整数,为FJ把所有奶牛都载过河所需的最少时间

Sample Input

5 10
3
4
6
100
1

输入说明:

FJ带了5头奶牛出门。如果是单独把木筏划过河,FJ需要花10分钟,带上
1头奶牛的话,是13分钟,2头奶牛是17分钟,3头是23分钟,4头是123分钟,将
5头一次性载过去,花费的时间是124分钟。

Sample Output

50

HINT

输出说明:

Farmer John第一次带3头奶牛过河(23分钟),然后一个人划回来

(10分钟),最后带剩下的2头奶牛一起过河(17分钟),总共花费的时间是

23+10+17 = 50分钟。

Source

Silver

【BZOJ】1617: [Usaco2008 Mar]River Crossing渡河问题(dp)相关推荐

  1. bzoj 1617: [Usaco2008 Mar]River Crossing渡河问题(DP)

    1617: [Usaco2008 Mar]River Crossing渡河问题 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1077  Solved: ...

  2. 【bzoj1617】[Usaco2008 Mar]River Crossing渡河问题 dp

    题目描述 Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏. 由于奶牛不会划船,在整个渡河过程中,FJ必须始终在木 ...

  3. BZOJ1617: [Usaco2008 Mar]River Crossing渡河问题

    Portal 1617: [Usaco2008 Mar]River Crossing渡河问题 Time Limit: 5 Sec   Memory Limit: 64 MB Submit: 1005  ...

  4. [Usaco2008 Mar]River Crossing渡河问题

    题目描述 Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏. 由于奶牛不会划船,在整个渡河过程中,FJ必须始终在木 ...

  5. bzoj1617[Usaco2008 Mar]River Crossing渡河问题

    Description Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏. 由于奶牛不会划船,在整个渡河过程中,F ...

  6. bzoj 1597 [Usaco2008 Mar]土地购买——斜率优化dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 又一道斜率优化dp.负数让我混乱.不过仔细想想还是好的. 还可以方便地把那个负号放到x ...

  7. BZOJ 1597: [Usaco2008 Mar]土地购买( dp + 斜率优化 )

    既然每块都要买, 那么一块土地被另一块包含就可以不考虑. 先按长排序, 去掉不考虑的土地, 剩下的土地长x递增, 宽y递减 dp(v) = min{ dp(p)+xv*yp+1 } 假设dp(v)由i ...

  8. bzoj 1598: [Usaco2008 Mar]牛跑步 [k短路 A*] [学习笔记]

    1598: [Usaco2008 Mar]牛跑步 题意:k短路 ~~貌似A*的题目除了x数码就是k短路~~ \[ f(x) = g(x) + h(x) \] \(g(x)\)为到达当前状态实际代价,\ ...

  9. bzoj 1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机

    1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: ...

最新文章

  1. H3C 交换机命名规则
  2. 浅析日常网站建设中运营与优化的工作重点
  3. 笨办法学Python——学习笔记1
  4. java 脚本引擎性能_Java SE 6 入门之脚本引擎加大程序性能
  5. easybcd android x86,【图片】不需U盘,简单三步,Win系统变Win+Android双系统!【androidx86吧】_百度贴吧...
  6. MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
  7. Thunar 右键菜单等自定义
  8. 基于nbu oj c语言答案,Just oj 2018 C语言程序设计竞赛(高级组)F:Star(结构体排序+最小生成树)...
  9. exit和return区别
  10. 快速开发工作流_02_集成在线流程设计器
  11. mac系统安装npm所遇问题
  12. [收藏]实践参考:parted创建硬盘分区并创建LVM
  13. 【eclipse插件开发实战】Eclipse插件开发2——SWT
  14. 基于核极限学习机(KELM)回归预测 -附代码
  15. UIAccelerometer 加速计
  16. iOS11及iPhone X适配
  17. 程序员如何提高编程时打字速度的5个Tips
  18. Java 用“等待-通知”机制优化循环等待
  19. ora-04098:触发器 无效且未通过重新验证问题解决之权限
  20. R语言数据可视化-箱线图

热门文章

  1. 线程安全与可重入函数的区别与联系
  2. 插上u盘后计算机不显示内存不足怎么办,u盘安装win7之后提示内存不足怎么办
  3. 美团发布袋鼠宝贝公益计划 饿了么等全行业外卖骑手都可申请
  4. cp语录(持续更新)
  5. 6条引用参考文献的正确姿势
  6. win10 解决无线网络连接出现黄色感叹号
  7. 服务器系统集成商,江苏服务器集成商
  8. [转载] 测试一个杯子
  9. 程序员进阶之路 --- 如何超过大多数人?
  10. 查看当前显卡驱动支持最高的cuda版本