在每一秒可以进行三种操作:闪烁、休息、跑步,闪烁和休息涉及到能量的回复和使用,先计算闪烁得举例,在闪烁的举例的基础上去计算跑步的举例。f[i]:表示在i秒内移动的最远的举例
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 300010;
int m, s, t;
int f[N];
int main()
{
cin >> m >> s >> t;
for(int i = 1; i <= t; i ++)
{
if(m >= 10) f[i] = f[i-1] + 60, m -= 10;
else f[i] = f[i-1], m += 4;
}
int endT = t + 1;
for(int i = 1; i <= t; i ++)
{
if(f[i] - f[i-1] < 17) f[i] = f[i-1] + 17;
if(f[i] > s) endT = min(endT, i);
}
if(f[t] > s) cout << "Yes" << endl << endT << endl;
else cout << "No" << endl << f[t] << endl;
return 0;
}