有贪心的思想,开挂肯定比一步一步跑快些啊。因为回复10点+开挂一次的时间是3.5s,移动了60m,而跑3.5s只有59.5m...当然是开挂好啊
那么分两次进行判定,先开挂,然后再一步一步跑:
#include <cstdio>
#include <algorithm>
using namespace std;
int dp[300001];
int main()
{
int m,s,t;
scanf("%d%d%d",&m,&s,&t);
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
%d",i);return 0;
}
}
printf("No
%d",dp[t]);
return 0;
}