P1095 守望者的逃离

输入

39 200 4

输出

No
197

输入

36 255 10

输出

Yes
6

好像悟到了DP的真谛(doge)
动态规划,就是动态地维护当前的状态。
本题种状态是距离,用 d p [ i ] dp[i] dp[i] 存第 i i i 秒所走的最大距离.
本题种影响状态的因素有三(有三种操作)
放魔法,休息和走路。
放魔法和休息是一体的。
所以先考虑边放魔法闪现边休息的状态,更新,再比较与走路相比那种方***使得最后所走的路程最大。

#include<bits/stdc++.h>
#define ls (p<<1)
#define rs (p<<1|1)
#define mid ((l+r)>>1)
using namespace std;

typedef long long ll;
const ll N=300007;
ll m,s,t,dp[N];
int main()
{
    scanf("%lld %lld %lld",&m,&s,&t);
    dp[0]=0;
    for(int i=1;i<=t;++i)
    {
        if(m>=10)dp[i]=dp[i-1]+60,m-=10;
        else dp[i]=dp[i-1],m+=4;
    }
    for(int i=1;i<=t;++i)
    {
        dp[i]=max(dp[i],dp[i-1]+17);
        if(dp[i]>s)
        {
            printf("Yes\n");
            printf("%d\n",i);
            return 0;
        }
    }
    printf("No\n");
    printf("%lld\n",dp[t]);
    return 0;
}

有任何疑问欢迎评论哦虽然我真的很菜