P1095 守望者的逃离
输入
39 200 4
输出
No
197
输入
36 255 10
输出
Yes
6
好像悟到了DP的真谛(doge)
动态规划,就是动态地维护当前的状态。
本题种状态是距离,用 dp[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;
}
有任何疑问欢迎评论哦虽然我真的很菜