题目链接
点击打开链接
题解:
先只用魔法跑一遍,然后再循环一遍用跑步优化,一开始实在想不出怎么优化,其实情况很明白,离终点很远的时候肯定是一直闪现,离得近的时候可能与其闪现休息,跑步更快。但是实际写的时候很麻烦……因为还得记录魔法的消耗。后来干脆弄一个一直跑的人,每次都和一直闪的人比……
#include <iostream> #include<cstdio> using namespace std; long long f[300005]; int main() { int m,s,t,i; scanf("%d%d%d",&m,&s,&t); for(i=1;i<=t;i++){ if(m>=10){ f[i]=f[i-1]+60; m-=10; } else { f[i]=f[i-1]; m+=4; } } for(i=1;i<=t;i++){ if(f[i]<f[i-1]+17)f[i]=f[i-1]+17; if(f[i]>=s){printf("Yes\n%d",i);return 0;} } printf("No\n%d",f[t]); return 0; }