题目

一道入门的dp,首先要先看懂题目要求。

容易得出状态\(dp[i][j]\)定义为i时间疲劳度为j所得到的最大距离

有两个坑点,首先疲劳到0仍然可以继续疲劳。

有第一个方程:

\(dp[i][0]=max(dp[i-1][0],d[i][0])\)

而如果要休息则一定要休息到疲劳值为0才可以停止。

有第二个方程:

\(dp[i][0]=max(dp[i][0], dp[i-j][j])\)意思是i位置疲劳度为0时的最大距离,是i-j位置疲劳值为j时休息j天的最大距离。

而根据题目意思所得到的不休息选择跑步的方程是:

\(dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + d[i])\)

完善完善转移顺序就可得到程序:

#include <bits/stdc++.h>
#define N 1000101
#define int long long
using namespace std;
int n, m, d[N], dp[10031][531];//第n分钟必须休息到0
signed main()
{
// freopen("data.in", "r", stdin);
scanf("%lld%lld", &n, &m);
for (int i = 1; i <= n; i++)
scanf("%lld", &d[i]);
for (int i = 1; i <= n; i++)
{
dp[i][0] = max(dp[i - 1][0], dp[i][0]);
for (int j = 1; j <= m; j++)
dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + d[i]);//不休息
for (int j = 1; j <= min(m, n); j++)//休息
dp[i][0] = max(dp[i][0], dp[i - j][j]);//i位置不疲劳的状态的值
}
for (int i = n; i <= n; i++)
printf("%lld ", dp[i][0]);
return 0;
}

最新文章

  1. MySQL 数据备份与还原
  2. 封装对Cookie和Session设置或取值的类
  3. 用JLabel显示时间-- JAVA初学者遇到的一个困难
  4. VPN指定某个程序,其实是改路由表(赛风支持VPN和SSH和SSH+模式)
  5. HDU -2100-Lovekey
  6. 【Ubuntu16.04】 install nginx
  7. 解决mysql启动失败报1067错误
  8. linux 运维常用工具表
  9. Java实现网页抓取的一个Demo
  10. ACM Find them, Catch them
  11. Nginx的启动、停止和重启
  12. 初识springcloud
  13. js实现浏览器用户信息收集
  14. IE8 select 动态下拉遇到的问题
  15. Tomcat连接池配置
  16. 阿里云堡垒机密钥连接ECS服务器
  17. Unity Editor(一)OnInspectorGUI的重写与面板的创建
  18. 深入理解 iOS Rendering Process
  19. OO课程总结
  20. 论文笔记:IRGAN——A Minimax Game for Unifying Generative and Discriminative Information

热门文章

  1. 4、线程池(摘自C#高级编程第7版)
  2. k8s安装部署问题、解决方案汇总
  3. 【转载】JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案
  4. 2019 顺网游戏java面试笔试题 (含面试题解析)
  5. property Alternative forms propretie
  6. C#操作mongodb(聚合函数)-分组找出每组的最大值
  7. 【方法整理】Oracle 获取trace跟踪文件名的几种常用方式
  8. Cannot assign to read only property &#39;exports&#39; of object &#39;#&lt;Object&gt;&#39; ,文件名大小写问题!!!
  9. windows10 进入BIOS
  10. uuid简述