Time Limit: 1 second
Memory Limit: 128 MB

【问题描述】

奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1 <= N <= 10,000)分钟的晨跑。在每分钟的开始,贝茜会选择下一分钟是用来跑步还是休息。 贝茜的体力限制了她跑步的距离。更具体地,如果贝茜选择在第i分钟内跑步,她可以在这一分钟内跑D_i(1 <= D_i <= 1,000)米,并且她的疲劳度会增加1。不过,无论何时贝茜的疲劳度都不能超过M(1 <= M <= 500)。如果贝茜选择休息,那么她的疲劳度就会每分钟减少1,但她必须休息到疲劳度恢复到0为止。在疲劳度为0时休息的话,疲劳度不会再变动。晨跑开始时,贝茜的疲劳度为0。 还有,在N分钟的锻炼结束时,贝茜的疲劳度也必须恢复到0,否则她将没有足够的精力来对付这一整天中剩下的事情。 请你计算一下,贝茜最多能跑多少米。

【输入格式】

第1行: 2个用空格隔开的整数:N 和 M 第2..N+1行: 第i+1为1个整数:D_i

【输出格式】

输出1个整数,表示在满足所有限制条件的情况下,贝茜能跑的最大距离

【数据规模】

Sample Input1

5 2
5
3
4
2
10

Sample Output1

9

【样例说明】

贝茜在第1分钟内选择跑步(跑了5米),在第2分钟内休息,在第3分钟内跑步(跑了4米),剩余的时间都用来休息。因为在晨跑结束时贝茜的疲劳度必须为0,所以她不能在第5分钟内选择跑步

【题解】
这是道动态规划的问题。
设f[i][j]表示第i分钟疲劳值为j的最大跑动距离。
f[i][j] = f[i-1][j-1]+d[j];
f[i][0] = max{f[i-1][0],f[i-j][j]);
这里的f[i-j][j]表示第i-j天它的疲劳值为j,那么再休息j分钟变为第i分钟,疲劳值就为0了,又或者max函数的左边,代表它前一分钟的疲劳值也为0,然后再休息一分钟还是0。
然后如果第i分钟在跑,则直接递增上这一分钟的距离就好了。因为没有其他情况,所以不用取max(且d[i]是大于0的所以肯定比不跑优啊!)
【代码】
#include <cstdio>int n, m, f[10001][501] = { 0 },d[10001];int max(int a, int b)//返回a和b中的较大值。
{return a > b ? a : b;
}int main()
{scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++)//输入每一分钟能够奔跑的距离。scanf("%d", &d[i]);for (int i = 1; i <= n; i++){f[i][0] = f[i - 1][0];//表示这一分钟和前一分钟一样在休息。for (int j = 1; j <= m; j++)//枚举最大疲劳值{if (j < i)//如果疲劳值小于天数f[i][0] = max(f[i][0], f[i - j][j]);//可以从第i-j分钟疲劳值为j的时候推到第i分钟疲劳值为0的时候f[i][j] = f[i - 1][j - 1] + d[i];//又或者第i分钟要跑,然后跑了d[i]的距离。疲劳值从j-1变为j;}}printf("%d\n", f[n][0]);//到了最后疲劳值要为0;return 0;
}

转载于:https://www.cnblogs.com/AWCXV/p/7632284.html

【u025】贝茜的晨练计划相关推荐

  1. BZOJ 1613: [Usaco2007 Jan]Running贝茜的晨练计划

    题目 1613: [Usaco2007 Jan]Running贝茜的晨练计划 Time Limit: 5 Sec  Memory Limit: 64 MB Description 奶牛们打算通过锻炼来 ...

  2. bzoj1613[Usaco2007 Jan]Running贝茜的晨练计划*

    bzoj1613[Usaco2007 Jan]Running贝茜的晨练计划 题意: 贝茜进行N分钟的晨跑.在每分钟的开始,贝茜会选择下一分钟是用来跑步还是休息,如果贝茜选择在第i分钟内跑步,她可以在这 ...

  3. 【USACO】贝茜的晨练计划

    [USACO]贝茜的晨练计划 题目: 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1 <= N <= 10,000)分钟的晨跑. 在每分钟的开始 ...

  4. bzoj1613 贝茜的晨练计划

    Description 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1<=N<=10,000) 分钟的晨跑.在每分钟的开始,贝茜会选择下一分钟是 ...

  5. JZOJ__Day 10:【普及模拟】【USACO】贝茜的晨练计划

    题目描述 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1 <= N <= 10,000)分钟的晨跑. 在每分钟的开始,贝茜会选择下一分钟是用来跑 ...

  6. 动态规划特训:贝茜的晨练(多状态转移)

    解题思路:影响最终跑多少米的是分钟和疲劳度这两个参量,很明显,这是一个二维dp的状态转化问题.dp[i][j]记录该状态下能跑的最大米数,其中i表示第i分钟,j表示疲劳度数.注意边界条件,设置dp[N ...

  7. bzoj 3407: [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题(DP)

    3407: [Usaco2009 Oct]Bessie's Weight Problem 贝茜的体重问题 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: ...

  8. [BZOJ1643][Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪

    1643: [Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: ...

  9. bzoj 1643: [Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪(DP)

    1643: [Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪 Time Limit: 5 Sec  Memory Limit: 64 MB Submit:  ...

最新文章

  1. Unity3D常用代码总结
  2. RS232接口是如何工作的?
  3. 计算机网络可以把在区域上分散的单个,计算机网络技术及应用课后习题
  4. HDFS设计思路,HDFS使用,查看集群状态,HDFS,HDFS上传文件,HDFS下载文件,yarn web管理界面信息查看,运行一个mapreduce程序,mapreduce的demo...
  5. C#:invoke 与 BeginInvoke使用区别
  6. 奥斯卡“最佳国际电影”奖,《哪吒之魔童降世》申请出战!
  7. linux中python进程,如何检查进程在python中运行(在linux中)?
  8. Linux的uevent事件机制
  9. 如何请求您的Apple ID帐户数据的副本
  10. python数据分析新手入门课程学习——(五)特征工程概述(数据预处理)(来源:慕课网)
  11. win10专业版有必要吗_Win10专业版和家庭版系统有什么不同?
  12. Animation(五-足球动态移动)
  13. 知网提供的“导出与分析”功能来确定论文主题
  14. python常用的表达式有关系表达式_数学关系式 表示成正确的 Python表达式为_________。_学小易找答案...
  15. 各位单身狗的福音:表白爱心魔改版
  16. 自动驾驶 11-3: 根据 LIDAR 数据进行位姿估计 Pose Estimation from LIDAR Data
  17. 跨屏网页设计为什么越来越流行,浅谈
  18. win10 1903 1909 Realtek 声卡均衡器 调节失效 解决
  19. linux下如何删除文件
  20. 商超SaaS:开发第一周总结

热门文章

  1. Python爬虫登录大学官网
  2. 微信接入探秘(五)——万事俱备,只欠架构(API篇)
  3. 敏捷开发:编写开发文档的利与弊
  4. 斐波那契问题——上台阶问题
  5. 牛顿下山法C++实现
  6. 手写签名插件—jSignature使用心得
  7. 2022杭电多校八 1011-Stormwind(贪心)
  8. 自定义SSLSocketFactory
  9. 快速傅里叶变换-快速傅里叶变换
  10. 企业微信支付收款码申请开通方法