博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pku 3661 Running DP
阅读量:5085 次
发布时间:2019-06-13

本文共 1091 字,大约阅读时间需要 3 分钟。

奶牛在N分钟内锻炼,在每一分钟他可以选择跑步或者休息,每跑一分钟疲劳度加1,每休息一份中疲劳度减1。休息时必须等到疲劳度为0才能继续跑,每分钟所能跑的距离为Di,在跑的过程中疲劳度不能超过m,求奶牛可以跑得最长距离;

dp的题目,拿过来果断的想不出状态转移方程啊,对dp的感觉还是这么弱,以后要加强锻炼。一共有n个点,有限制m,这不是很典型的二维dp码?

dp[i][j] 表示在i分钟时疲劳度为j所能跑得最远距离则有状态转移方程:

如果选择跑步:dp[i][j] = dp[i - 1][j - 1] + val[i] (1<= j <= m && j <= i)

如果选择休息:dp[i][0] = max(dp[i - 1][0],dp[i - j][j]) (i - j >= j) 第二种选择dp[i - j][j]是在i - j >= j时才有的情况因为只有这时前边才会出现疲劳度达到m后在休息的。。

dp好强打。。。。膜拜DP

View Code
#include 
#include
#include
#define N 10007#define M 507using namespace std;int val[N];int n,m;int dp[N][M];int main(){ int i,j; scanf("%d%d",&n,&m); for (i = 1; i <= n; ++i) scanf("%d",&val[i]); memset(dp,0,sizeof(dp)); for (i = 1; i <= n; ++i) { dp[i][0] = dp[i - 1][0]; for (j = 1; j <= i && j <= m; ++j) { if (i - j >= j) dp[i][0] = max(dp[i][0],dp[i - j][j]); dp[i][j] = dp[i - 1][j - 1] + val[i]; } } printf("%d\n",dp[n][0]); return 0;}

转载于:https://www.cnblogs.com/E-star/archive/2012/05/06/2485651.html

你可能感兴趣的文章
HDU 5458 Stability
查看>>
左手坐标系和右手坐标系
查看>>
solr后台操作Documents之增删改查
查看>>
http://yusi123.com/
查看>>
文件文本的操作
查看>>
Ubuntu linux下gcc版本切换
查看>>
记一次Web服务的性能调优
查看>>
jQuery.form.js使用
查看>>
(转)linux sort,uniq,cut,wc命令详解
查看>>
关于ExecuteNonQuery执行的返回值(SQL语句、存储过程)
查看>>
UVa540 Team Queue(队列queue)
查看>>
mysql数据增删改查
查看>>
shell中下载最新版本或指定版本的办法(Dockerfile 中通用)
查看>>
极客时间-左耳听风-程序员攻略-分布式架构工程设计
查看>>
akka之种子节点
查看>>
不知道做什么时
查看>>
matlab 给某一列乘上一个系数
查看>>
密码学笔记——培根密码
查看>>
Screening technology proved cost effective deal
查看>>
MAC 上升级python为最新版本
查看>>