首页 > 其他 > 详细

P1353 Running S

时间:2020-03-17 16:39:45      阅读:53      评论:0      收藏:0      [点我收藏+]

题意:https://www.luogu.com.cn/problem/P1353

奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行 n 分钟的晨跑。在每分钟的开始,贝茜会选择下一分钟是用来跑步还是休息。

贝茜的体力限制了她跑步的距离。更具体地,如果贝茜选择在第 ii 分钟内跑步,她可以在这一分钟内跑 di? 米,并且她的疲劳度会增加 1。不过,无论何时贝茜的疲劳度都不能超过 m。

如果贝茜选择休息,那么她的疲劳度就会每分钟减少 1,但她必须休息到疲劳度恢复到 0 为止。在疲劳度为 0 时休息的话,疲劳度不会再变动。晨跑开始时,贝茜的疲劳度为 0

还有,在 n 分钟的锻炼结束时,贝茜的疲劳度也必须恢复到 0,否则她将没有足够的精力来对付这一整天中剩下的事情。

请你计算一下,贝茜最多能跑多少米


看上去不难的一道题目,wa了很久。

明显定义dp [ i ] [ j ] 为第i分钟疲劳值为j的状态最多跑几米

如果j大于1,那么可能是前一秒疲劳值为j-1,这一秒在跑步造成的。

如果j等于0,那么可能是直接继承的上一秒疲劳值为0,也可能是上一秒疲劳值为1休息而来

#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[10009];
int dp[10090][509];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)    cin>>a[i];
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=min(i,m);j++)
        {
            if(j==0)    dp[i][j]=max(dp[i][j],dp[i-1][j]);
            else dp[i][0]=max(dp[i][0],dp[i-j][j]);//j不为0,那么可以考虑休息 
            if(j>=1)    dp[i][j]=max(dp[i][j],dp[i-1][j-1]+a[i]);
        }
    }
    cout<<dp[n][0];
}

 

 

 

P1353 Running S

原文:https://www.cnblogs.com/iss-ue/p/12511522.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!