博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【洛谷 SP283】NAPTIME - Naptime(DP)
阅读量:7294 次
发布时间:2019-06-30

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

先考虑如果只有一天,那么该怎么做。

\(f[i][j][1]\)表示前\(i\)个小时睡了\(j\)个小时并且第\(j\)个小时正在睡觉时的最大体力,\(f[i][j][1]\)表示前\(i\)个小时睡了\(j\)个小时并且第\(j\)个小时没在睡觉时的最大体力。
则有
\[f[i][j][0]=max(f[i-1][j][0],f[i-1][j][1])\]
\[f[i][j][1]=max(f[[i-1][j-1][0],f[i-1][j-1][1])\]
边界条件:\(f[1][0][0]=f[1][1][1]=0\)
答案:\(max(f[n][b][0],f[n][b][1])\)
然后,现在两天是连着的,唯一的区别就是第一个小时可以睡着。
于是,令\(f[1][1][1]=U_1\),然后再跑一遍DP,把\(ans\)\(f[n][b][1]\)取最大值就行了。
为什么只与\(f[n][b][1]\)取最大值呢?
因为这里把\(f[1][1][1]\)赋值为了\(U_1\),那么我们默认就是第一个小时进入了熟睡状态,所以上一天最后一个小时必须开始睡觉才行。
因为SPOJ的空间限制比较大,我就没用滚动数组了。

#include 
inline int max(int a, int b){ return a > b ? a : b;}inline int min(int a, int b){ return a < b ? a : b;}const int MAXN = 4000;int f[MAXN][MAXN][3], w[MAXN];int n, m, T;int main(){ scanf("%d", &T); while(T--){ int ans = 0; scanf("%d%d", &n, &m); for(int i = 1; i <= n; ++i) scanf("%d", &w[i]); f[1][0][0] = f[1][1][1] = 0; for(int i = 2; i <= n; ++i){ for(int j = 1; j <= min(i, m); ++j){ f[i][j][0] = max(f[i - 1][j][0], f[i - 1][j][1]); if(j != 1) f[i][j][1] = max(f[i - 1][j - 1][0], f[i - 1][j - 1][1] + w[i]); //第一个小时不加体力 } } f[1][1][1] = w[1]; f[1][0][0] = 0; //边界 ans = max(f[n][m][1], f[n][m][0]); for(int i = 2; i <= n; ++i) for(int j = 1; j <= min(i, m); ++j){ f[i][j][0] = max(f[i - 1][j][0], f[i - 1][j][1]); if(j != 1) f[i][j][1] = max(f[i - 1][j - 1][0], f[i - 1][j - 1][1] + w[i]); } ans = max(ans, f[n][m][1]); printf("%d\n", ans); } return 0;}

转载于:https://www.cnblogs.com/Qihoo360/p/9566842.html

你可能感兴趣的文章
关于毛刺
查看>>
微信小程序自定义微信客服按钮
查看>>
Ural 1014 Product of Digits NYOJ 270 数的分解 解题报告
查看>>
SPOJ1812 LCS2 - Longest Common Substring II
查看>>
CSS属性(display)
查看>>
具体数学第二版第二章习题(1)
查看>>
第十四章 字符、字符串、编码
查看>>
注意!ASP.NET MVC 3 的一个 OutputCache 问题
查看>>
单行文本垂直居中
查看>>
Remove Element
查看>>
C语言 结构体
查看>>
蓝桥杯-历届试题-公式求值
查看>>
快速排序
查看>>
冒泡排序
查看>>
(七)Action访问Servlet API
查看>>
POJ2960 S-Nim(博弈论:sg函数)
查看>>
$().each()和$.each()
查看>>
iconfont字体图标
查看>>
AndroidStudio下加入百度地图的使用 (三)——API基本方法及常量属性
查看>>
二、2、上传成功也不一定得到flag哦!
查看>>