传送门:洛谷 P1095 守望者的逃离
算法分析:分两种情况:
1、运用贪心,尽可能用闪烁法术
2、枚举秒数,判断此时用跑步速度是否能获得更大收益
时间复杂度:\(O(t)\)
#include<iostream>
#include<cstdio>
using namespace std;
const int maxT=300000;
int t,m,s,dp[maxT+1],ans=0;
int main()
{
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) {ans=i; break;}
}
if(ans) printf("%d",ans);
else printf("%d",dp[s]);
return 0;
}