P1353 [USACO08JAN] Running S

原题链接

这道题让我对状态转移的理解更深

题解

1.对于任意一个点,不是在休息就是在锻炼,因此可以设 dp[i][j] 又因为疲劳值对答案也会有影响,或者说,当确定时间,决策,疲劳值时,所走过的路的最大值是可以确定的
所以再加一维

code

#include<bits/stdc++.h>
using namespace std;
int dp[10005][2][505]={0};
int d[10005];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>d[i];

    dp[0][0][0]=0;//第i分钟,是否选择休息,0代表休息,1代表运动,采取行动后的疲劳值,
    for(int i=1;i<=n;i++)
    {
        dp[i][0][0]=max(max(dp[i-1][0][1],dp[i-1][1][1]),dp[i-1][0][0]);//疲劳值为0的休息,前一刻可能也在休息
        for(int j=1;j<=m;j++)
        {
            dp[i][0][j]=max(dp[i-1][0][j+1],dp[i-1][1][j+1]);//前一刻要么在运动,要么在休息,可以随时休息
            if(j>1)dp[i][1][j]=dp[i-1][1][j-1]+d[i];//只能连续运动
            else dp[i][1][1]=dp[i-1][0][0]+d[i];//如果运动后疲劳值为1,代表之前在休息
        }
    }

    cout<<dp[n][0][0];//n时刻肯定在休息,疲劳值为0
    return 0;
}

一遍过好开心

posted @   纯粹的  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示