这显然是一道环形dp的题目

处理环形我们都是要转化为线性来做

一般有这么两种方法处理

  1. 复制一段到最后 (比如说noip的能量项链)

  2. 考查环形对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的更多相关文章

  1. [USACO2005][POJ2228]Naptime(对特殊环状DP的处理)

    题目:http://poj.org/problem?id=2228 题意:将一天分为N小时,每小时都有一个价值w,有一头牛要睡觉,而它的睡觉是连续的,且第一小时不能算价值,即如果你睡了[a,b],则你 ...

  2. poj2228 Naptime【(环结构)线性DP】

    Naptime Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:3374   Accepted: 1281 Descriptio ...

  3. POJ2228 Naptime

    题目:http://poj.org/problem?id=2228 环形dp.开一维记录当前最后一份时间是否在睡.很精妙地分两类. 1.正常从1到n线性dp. 2.上边只有一种情况未覆盖:第一份时间就 ...

  4. POJ2228 Naptime 环形DP

    题目大意:牛在第i个小时睡觉能够恢复U[i]点体力.睡觉时第一小时不恢复体力.一天的N小时连着下一天的1小时.求能够恢复体力的和的最大值. 定义DP[i][j][0]为前i个小时休息了j个小时,i小时 ...

  5. $Poj2228$/洛谷$SP283\ Naptime$ 环形$DP$

    Luogu 一定要记得初始化为-inf!!! Description 在某个星球上,一天由N小时构成.我们称0-1点为第一个小时,1-2点为第二个小时,以此类推.在第i个小时睡觉能恢复Ui点体力.在这 ...

  6. poj3月题解

    poj2110 二分答案+bfs判定 poj2112 二分答案+最大流判定(二分答案真乃USACO亲儿子) poj1986 裸的LCA,值得注意的是,树中任意两点的距离可以等于这两点到根的距离减去2* ...

  7. OJ题目分类

    POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...

  8. 常规DP专题练习

    POJ2279 Mr. Young's Picture Permutations 题意 Language:Default Mr. Young's Picture Permutations Time L ...

  9. DP重开

    颓了差不多一周后,决定重开DP 这一周,怎么说,学了学trie树,学了学二叉堆,又学了学树状数组,差不多就这样,然后和cdc一番交流后发现,学这么多有用吗?noip的范围不就是提高篇向外扩展一下,现在 ...

随机推荐

  1. shell脚本实现冒泡排序 分类: 学习笔记 linux ubuntu 2015-07-10 14:16 79人阅读 评论(0) 收藏

    手动输入一行字符串,并对其排序. 脚本如下: #!/bin/bash #a test about sort echo "please input a number list" re ...

  2. Java基础知识强化之集合框架笔记44:Set集合之TreeSet保证元素唯一性和自然排序的原理和图解

    1. TreeSet保证元素唯一性和自然排序的原理和图解 2. TreeSet唯一性以及有序性底层剖析: 通过观察TreeSet的add()方法,我们知道最终要看TreeMap的put()方法. 跟踪 ...

  3. Java基础知识强化之集合框架笔记41:Set集合之HashSet存储自定义对象并遍历练习

    1. HashSet集合存储自定义对象并遍历.如果对象的成员变量值相同即为同一个对象 注意了: 你使用的是HashSet集合,这个集合的底层是哈希表结构. 而哈希表结构底层依赖:hashCode()和 ...

  4. MAC 环境下 初始化新的mysql root 密码

    mac 环境下初始化mysql的root密码 关掉mysql服务,打开系统设置最后的mysql,然后将mysql先关掉 生成一个文件命名mysql-init,文件中放入:一句话,这句话不同版本不一样, ...

  5. HttpClient使用cookie

    import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; ...

  6. TypeScript笔记[5]泛型+Dictionary 转

    TypeScript笔记[5]泛型   在C++.C#.Java等主流编程语言中,一般对泛型编程提供了支持.合理利用泛型,可以提高开发效率.提升代码质量. 例如在C++编程语言中,常常利用下面的结构表 ...

  7. Business Intelligence (BI)

    BI, 全称Business Inteligence. 帮助企业更有效地利用数据,提供经营决策支持.让决策管理者随时随地获取关键信息,基于数字决策,最终提高决策水平. 包括范围(层次由低到高):数据报 ...

  8. 华硕_ZX50JX4200 安装ssd固态盘

    本人亲身的一次经历,帮朋友的华硕手提装一个内存和ssd固态 内存5分钟搞定,但是ssd固态盘就经过了一番的折腾 首先要拧掉所有后盖的螺丝,把光驱拆下来,注意撬开键盘板的时候有排线,不能弄断了.然后一定 ...

  9. python中的几种集成分类器

    from sklearn import ensemble 集成分类器(ensemble): 1.bagging(ensemble.bagging.BaggingClassifier) 对随机选取的子样 ...

  10. cocos2dx 实现华丽丽的滚动层.

    前言 好久没写博客了. 前几周策划要求实现一个比较多功能的滚动层控件. 这个艰巨的任务就这样自然而然的落在了我这小身板上. 当然了, 只要我出手, 难度再高的需求也变得不堪一击. 哈哈哈哈 示例图 该 ...