题目传送门

【题目大意】

一天由$n$个小时构成,在第$i$个小时睡觉能够恢复$U_i$点体力。有一头牛要休息$b$个小时,可以不连续,但休息的第1个小时无法恢复体力。前一天的最后一个小时和第二天的第一个小时是连在一起的,求这头牛能恢复的体力最大值。

【思路解析】

首先这是一个环形DP问题,所以我们先简化问题,假设前一天的最后一个小时和第二天的第一个小时不是连在一起的,转化为线性问题来处理。设$f[i][j][1]$表示前$i$个小时休息了$j$个小时,并且第$i$个小时在休息的体力恢复最大值,$f[i][j][0]$则表示第$i$个小时不休息的体力恢复最大值。于是可以得到转移方程:

$$f[i][j][1]=max(f[i-1][j-1][0],f[i-1][j-1][1]+u[i])$$

$$f[i][j][0]=max(f[i-1][j][0],f[i-1][j][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,然后答案为$f[n][b][1]$(为了保证第一个小时能恢复体力,前一天的最后一个小时必须休息)。

【代码实现】

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #define rg register
 5 #define go(i,a,b) for(rg int i=a;i<=b;i++)
 6 #define back(i,a,b) for(rg int i=a;i>=b;i--)
 7 #define mem(a) memset(a,128,sizeof(a));
 8 using namespace std;
 9 const int N=3832;
10 const int INF=1e9+9;
11 int n,b,u[N],f[N][2],ans=-INF;
12 int main(){
13     scanf("%d%d",&n,&b);
14     go(i,1,n) scanf("%d",&u[i]);
15     mem(f);f[0][0]=f[1][1]=0;
16     go(i,2,n) back(j,min(i,b),1){
17         f[j][0]=max(f[j][0],f[j][1]);
18         f[j][1]=max(f[j-1][0],f[j-1][1]+u[i]);
19     }
20     ans=max(f[b][1],f[b][0]);
21     mem(f);f[1][1]=u[1];
22     go(i,2,n) back(j,min(i,b),1){
23         f[j][0]=max(f[j][0],f[j][1]);
24         f[j][1]=max(f[j-1][0],f[j-1][1]+u[i]);
25     }
26     ans=max(ans,f[b][1]);
27     printf("%d\n",ans);
28     return 0;
29 }

代码戳这里

转载于:https://www.cnblogs.com/THWZF/p/11014316.html

poj2228 Naptime 题解报告相关推荐

  1. 2015浙江财经大学ACM有奖周赛(一) 题解报告

    2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...

  2. CSP-2019day1题解报告

    day1题解报告 题目 T1 T2 从链想起 转为正解 T3(摘自同级大佬xez) 题目 T1传送门 T2传送门 T3传送门 T1 乍一看,这道题做过,可以用对称性做,如果他的长度过了一半,就输出1, ...

  3. 爆炸的符卡洋洋洒洒题解报告

    爆炸的符卡洋洋洒洒题解报告 标签:动态规划 题目链接 来源:牛客网 解题思路: 显而易见的背包问题 但再观察a,b的数据范围,开不了那么大的dp数组 这就启发我们去优化,由于题目要求魔力总耗的是k的倍 ...

  4. 2022杭电多校5题解报告(同步自语雀)

    一.赛后总结 Wuhu~萌新又来啦~ 第一次在考场上写出NTT,虽然是比较裸,但感觉真的不错~ 开场看03,思路比较直,就是dijk,但跨层跳跃想了好久~最后想到了类似于B树或者B-树一类的层内链表, ...

  5. 2022杭电多校4题解报告(同步自语雀)

    一.赛后总结 嘤嘤嘤,本人纯萌新,深夜反思自己到底有多菜~(:′⌒`) 前天没写出状压,再前面不会SAM和圆方树,再往前不会NTT和FFT,真的是个啥也不会的萌新呢. 这场主要的问题在于02的0环和1 ...

  6. 2022牛客多校2题解报告(同步自语雀)

    一.赛后总结 总结就是缺乏清晰的大脑,当然一切的一切归因于实力不足. 开局看K,半个小时推出DP式子,交了就WA.差错没查出来,写了暴力对拍,就去看D了.后来拍了3个小时也没出问题...可能是数据生成 ...

  7. 【题解报告】ZJNU综合训练(2021.1.26)

    [题解报告]ZJNU综合训练(2021.1.26) B C D F H I J M 综合训练 ZJNU综合训练(2021.1.26) B:DP+搜索 | CF 1057C C:组合数学+dp | CF ...

  8. 题解报告(CDUT暑期集训——第三场)

    题解报告(CDUT暑期集训--第三场) A - Problem A. Ascending Rating HDU - 6319 思路:单调队列板子题?(但是弱的一批的我还是不会用(有空补上 用的滑动窗口 ...

  9. 题解报告(CDUT暑期集训——第二场)

    题解报告(CDUT暑期集训--第二场) D - Game HDU - 6312 思路:水题 Alice一直是必胜态 AC代码 #include<stdio.h> #include<i ...

最新文章

  1. 一文读懂Serverless,配置化思想复用到平台系统中
  2. kubeadm源码分析(内含kubernetes离线包,三步安装)
  3. 07-Windows Server 2012 R2 会话远程桌面-标准部署-RD授权
  4. GODOT 3.0 开发进度汇报 #6
  5. 性能测试,负载测试,压力测试有什么区别
  6. 虚拟背景背后的技术:直播时各种背景是怎么实现的?
  7. matlab2012生成dll,64位win7下vc2010如何調用matlab2012a中生成的dll文件
  8. 修改cmdline 把内存改成512MB
  9. 7-181 最长连续递增子序列 (20 分)
  10. mysql建立索引的优缺点|创建索引alter或create索引分类(PRIMARY KEY,UNIQUE KEY,FULLTEXT,INDEX)作用查看索引show index from table
  11. java调用libreoffice_使用Open / LibreOffice开始使用UNO和Java
  12. 安卓应用改了图标无效,是缓存的问题
  13. 计算机课程设计心得,课程设计心得体会450字
  14. Java关键字详解-配视频讲解链接(附带一些面试题)
  15. 计算机技术在建模中的作用,谈计算机在数学建模中的作用
  16. java xml格式化_使用java将xml格式化
  17. Simple Calculator 1.0(有声计算器)
  18. Day2 QT常用基础类型(自用)
  19. ais3_crackme 踩坑解析
  20. maven oracle 10.2.0.4.0,马文介绍说ojdbc:ojdbc14-10.2.0.4.0.jar,Maven,引入,ojdbcojdbc14102040jar...

热门文章

  1. ssd用HD软件测试准确吗,用HDTune测试固态硬盘?只有菜鸟才会这样做!
  2. 最小linux系统启动失败,技术|如何拯救一台GRUB 2启动失败的Linux电脑
  3. 车联网2022上半年“十四五”规划大盘点
  4. jfinal基本概述
  5. 使用Camstudio和KeyCastOW来录屏制作软件Demo视频
  6. 在windows服务器上使用node-windows部署nodeJS服务
  7. STM32嵌入式基础开发附C-STM32-CAN通讯
  8. 高端大气通用企业介绍PPT模板
  9. win10安装XMOS xTIMEcomposer 软件
  10. Flurry analytics SDK集成步骤及功能简介