链接

http://poj.org/problem?id=2228

题意

在一天 nnn 个小时中取 bbb 个小时,使权值和最大,bbb 个小时可分成若干段,每段的第一个小时的权值不计入总和,第 nnn 个小时与第一个小时相连

思路

记 f[i][j][0]f[i][j][0]f[i][j][0] 为前 iii 个小时中睡了 jjj 个小时且第 iii 个小时不在睡,f[i][j][1]f[i][j][1]f[i][j][1] 为前 iii 个小时中睡了 jjj 个小时且第 iii 个小时在睡

转移方程:

{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]+w[i])\begin{cases} 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]+w[i]) \end{cases}{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]+w[i])​

因为首尾相连,所以第 nnn 个小时会影响第一个小时

当第 nnn 个小时没有睡:f[1][0][0]=f[1][1][1]=0f[1][0][0]=f[1][1][1]=0f[1][0][0]=f[1][1][1]=0,结果为 f[n][b][0]f[n][b][0]f[n][b][0]

当第 nnn 个小时在睡:f[1][0][0]=0,f[1][1][1]=w[1]f[1][0][0]=0,f[1][1][1]=w[1]f[1][0][0]=0,f[1][1][1]=w[1],结果为 f[n][b][1]f[n][b][1]f[n][b][1]

取最大值

代码

#include<bits/stdc++.h>
using namespace std;
const int N=4000;
int w[N];
int f[N][2];
int main() {ios::sync_with_stdio(false);cin.tie(0);int n,b;cin>>n>>b;for(int i=1;i<=n;i++) cin>>w[i];memset(f,0xc0,sizeof f);f[0][0]=f[1][1]=0;for(int i=2;i<=n;i++)for(int j=min(i,b);j>=0;j--) {f[j][0]=max(f[j][0],f[j][1]);if(j) f[j][1]=max(f[j-1][0],f[j-1][1]+w[i]);}int res=f[b][0];memset(f,0xc0,sizeof f);f[0][0]=0,f[1][1]=w[1];for(int i=2;i<=n;i++)for(int j=min(i,b);j>=0;j--) {f[j][0]=max(f[j][0],f[j][1]);if(j) f[j][1]=max(f[j-1][0],f[j-1][1]+w[i]);}res=max(res,f[b][1]);cout<<res<<endl;return 0;
}

POJ 2228. Naptime相关推荐

  1. 【环形dp】poj 2228 Naptime

    题目链接 题意:一天分为N个时间片(可顺到下一天->环形),选择其中B个睡觉.选择第i个时间片能获得u_i点值,但是选择的一个区间内的第一个时间片用来入睡(没睡着),无法获得u_i值.问最大能获 ...

  2. poj 2228 Naptime(DP的后效性处理)

    \(Naptime\) 描述 Goneril是一只睡眠不足的母牛.她的一天被划分为N(3 <= N <= 3,830)相等的时间段,但她只能在床上花费B(2 <= B <N)不 ...

  3. poj 2228 Naptime

    题目 从N个元素(环形队列)中选出B个,求最大得分.(元素得分仅当其前面的元素也被选择了) 分析 我就不想口胡了 链接 现在知道了处理环上的dp还能这样玩 code #include<iostr ...

  4. Naptime POJ - 2228

    环形dp 分为两种情况:N休息 N不休息 #include<cstdio> #include<cstring> #include<algorithm> #inclu ...

  5. Naptime 【POJ - 2228】

    题目链接 题目大意 有一只牛要休息m个时间段,现在有n个时间段可以供选择,一个时间段有一个睡眠价值,这m个时间段可以连续也可以不连续,每次睡觉的第一个时间段时不获得睡眠价值的,这个牛可以从第一天的晚上 ...

  6. poj 2228 环形DP

    题意: 一天有n个时间,有一只牛希望一天可以休息睡小时.如果牛在第i时刻已经熟睡,他可以得到ui的休息.但是如果他在i时刚刚入睡,他不能得到休息.牛可以从前一天晚上睡到第二天.睡觉时间也不一定连续.问 ...

  7. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  8. POJ 动态规划题目列表

    1.这份列表当然不是我原创的,从文库里下载了一份,放到这里便于自己浏览和查找题目. ※最近更新:Poj斜率优化题目 1180,2018,3709 列表一:经典题目题号: 容易:  1018, 1050 ...

  9. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

最新文章

  1. 对云计算的忽视是 银行的战略失误
  2. C/C++ 框架,类库,资源集合
  3. 第85讲:Scala中For表达式的强大表现力实战
  4. html如何左侧固定div,详解左右宽度固定中间自适应html布局解决方案
  5. windows服务器远程执行命令(PowerShell+WinRM)
  6. 7006.vue项目之电商项目实战1-环境搭建及后台接口测试
  7. 聊聊spring for kafka对consumer的封装与集成
  8. 探索SQL Server元数据(一)
  9. 火狐浏览器的同步问题
  10. kindle文件转PDF文件
  11. Excel加密07版本及03版本
  12. 【windows】Webstorm2021安装教程
  13. 苹果手机13和小米手环6NFC,录入“不支持类型”的门禁卡
  14. 在Python中如何方便的制作个性化的词云图
  15. 通过网格拆分高德地图
  16. Android压缩图片和libjpeg库
  17. Python画出时钟
  18. 基于动态阈值、灰色世界、镜面法的自动白平衡
  19. 2008年,永动机启动第四次科技革命
  20. 云教学服务器系统软件多少钱,LanStarMaxi多机房云教学管理平台

热门文章

  1. linux命令查看删除哪些文件,linux删除文件除命令有哪些
  2. 联想m8000t安装windows2003蓝屏的解决方法
  3. ReactOS版本规划
  4. html意见反馈源码,意见反馈实例源码
  5. python求向量函数的雅可比矩阵_python – scipy中最小二乘函数的雅可比行列式的方法签名...
  6. 暗黑破坏神3ptr服务器位置,暗黑破坏神3——野蛮人1.05 PTR服务器测评 附BOSS攻略...
  7. can总线不加末端电阻_高手写的CAN总线入门总结,对全面理解CAN总线特性很有帮助...
  8. 通达信W底形态选股公式,也称双底形态
  9. jfinal基本概述
  10. python怎么安装pandas详细步骤