poj2228
这显然是一道环形dp的题目
处理环形我们都是要转化为线性来做
一般有这么两种方法处理
复制一段到最后 (比如说noip的能量项链)
考查环形对dp的影响然后分类讨论(比如bzoj1040)
这道题我们用第二种方法更好
先不考虑环的问题
设f[i,j,0/1]表示到第i段时间用了j段睡觉且当前(0表示为入睡,1表示已入睡)所带来的最大效用值
不难写出对应的转移方程;
然后我们分析环,不难发现,环的影响仅仅在第一段时间入睡是否能拿到对应的效用值
就是到最后我一直睡,睡到1,1的效用值是可以拿到的,而这是线性所拿不到的
因此我们再做一遍dp,强制第n段时间入睡即可,最终几种情况取最大值即可
const inf=-2147483647;
var f,g:array[0..1,0..4000,0..1] of longint;
a:array[0..4010] of longint;
n,k,i,j,t:longint;
function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end;
begin
readln(n,k);
for i:=1 to n do
readln(a[i]);
for i:=0 to k do
for j:=0 to 1 do
begin
f[0,i,j]:=inf;
g[0,i,j]:=inf;
end;
f[0,0,0]:=0;
f[0,1,1]:=0;
g[0,1,1]:=0;
t:=0;
for i:=2 to n do
begin
t:=1-t;
for j:=0 to k do
begin
f[t,j,0]:=max(f[1-t,j,0],f[1-t,j,1]);
g[t,j,0]:=max(g[1-t,j,0],g[1-t,j,1]);
if j>0 then
begin
f[t,j,1]:=max(f[1-t,j-1,1]+a[i],f[1-t,j-1,0]);
g[t,j,1]:=max(g[1-t,j-1,1]+a[i],g[1-t,j-1,0]);
end
else begin
f[t,j,1]:=inf;
g[t,j,1]:=inf;
end;
end;
end;
writeln(max(max(f[t,k,0],f[t,k,1]),g[t,k,1]+a[1]));
end.
poj2228的更多相关文章
- [USACO2005][POJ2228]Naptime(对特殊环状DP的处理)
题目:http://poj.org/problem?id=2228 题意:将一天分为N小时,每小时都有一个价值w,有一头牛要睡觉,而它的睡觉是连续的,且第一小时不能算价值,即如果你睡了[a,b],则你 ...
- poj2228 Naptime【(环结构)线性DP】
Naptime Time Limit: 1000MS Memory Limit: 65536K Total Submissions:3374 Accepted: 1281 Descriptio ...
- POJ2228 Naptime
题目:http://poj.org/problem?id=2228 环形dp.开一维记录当前最后一份时间是否在睡.很精妙地分两类. 1.正常从1到n线性dp. 2.上边只有一种情况未覆盖:第一份时间就 ...
- POJ2228 Naptime 环形DP
题目大意:牛在第i个小时睡觉能够恢复U[i]点体力.睡觉时第一小时不恢复体力.一天的N小时连着下一天的1小时.求能够恢复体力的和的最大值. 定义DP[i][j][0]为前i个小时休息了j个小时,i小时 ...
- $Poj2228$/洛谷$SP283\ Naptime$ 环形$DP$
Luogu 一定要记得初始化为-inf!!! Description 在某个星球上,一天由N小时构成.我们称0-1点为第一个小时,1-2点为第二个小时,以此类推.在第i个小时睡觉能恢复Ui点体力.在这 ...
- poj3月题解
poj2110 二分答案+bfs判定 poj2112 二分答案+最大流判定(二分答案真乃USACO亲儿子) poj1986 裸的LCA,值得注意的是,树中任意两点的距离可以等于这两点到根的距离减去2* ...
- OJ题目分类
POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...
- 常规DP专题练习
POJ2279 Mr. Young's Picture Permutations 题意 Language:Default Mr. Young's Picture Permutations Time L ...
- DP重开
颓了差不多一周后,决定重开DP 这一周,怎么说,学了学trie树,学了学二叉堆,又学了学树状数组,差不多就这样,然后和cdc一番交流后发现,学这么多有用吗?noip的范围不就是提高篇向外扩展一下,现在 ...
随机推荐
- 设置ViewController 数据源无法改变view
病情描述: viewController创建的时候勾选了xib,然后在显示的时候调用了如下语句: MTDetailDealViewController *detailController = [[MT ...
- inverse 相关设置
<set name="students" table = "student" inverse="true"> <!-- 指 ...
- 事件触发函数中的this,target,currentTarget,srcElement
要解释其中的区别,首先要理解浏览器的事件机制, 现在主流的浏览器事件基本是先捕获再冒泡,IE浏览器只有冒泡阶段 事件是在冒泡阶段触发的 看看这个HTML 当我点击"我是父节点的时候" ...
- 关于ADO.NET的一些知识整理
ADO.NET是什么 虽然我们都知道ADO.NET是对数据库的操作,但是要真的说出ADO.NET的具体含义还不是很容易. ADO.NET是ActiveX Data Objects的缩写,它是一个COM ...
- Unity3D 5.0简单的射线检测实现跳跃功能
这里是一个简单的跳跃,5.0和其他版本貌似不一样,并且,再起跳功能做的不完全. 不过一个基本的思路在这里. 1.首先,射线检测,这里是利用一个空对象,放到主角对象的下面 2.然后调节射线的位置,在主角 ...
- WPF 媒体播放器(MediaElement)使用实例(转)
在WPF 中可以使用MediaElement 为应用程序添加媒体播放控件,以完成播放音频.视频功能.由于MediaElement 属于UIElement,所以它同时也支持鼠标及键盘的操作.本篇将使用M ...
- 关于C#中的DateTime类型的技巧
* datetime.now.tostring()方法默认的你是无法得到全部的时间的格式的,只能得到日期,得不到具体时间,如果要具体时间,就应该使用 datetime的tostring()重载,dat ...
- 把Excel数据导入到数据库
引入命名空间 using System.IO; using System.Data; using System.Data.OleDb; 引入命名空间 首先要把Excel上传到服务器 //上传Excel ...
- Android 控件 之 Menu 菜单
http://www.cnblogs.com/Mrs-cc/archive/2012/07/21/2603042.html 1.OptionsMenu (选项菜单)用法总结 使用方法: 方法一:添 ...
- 最简单的基于FFmpeg的移动端例子:IOS 视频解码器-保存
===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...