[luoguP1095] 守望者的逃离(DP)
这题。。。。得考虑一些奇奇怪怪的复杂情况
不过也有简便方法。
枚举时间,先算出来只用魔法走的时间。
然后再枚举一遍时间,再算只走的时间,两个比较一下,取最游值。
代码
#include <cstdio>
#include <cstring>
#include <iostream>
#define N 3000001
int m, s, t;
int f[N];
inline int read()
{
int x = 0, f = 1;
char ch = getchar();
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
return x * f;
}
int main()
{
int i, j;
m = read();
s = read();
t = read();
for(i = 1; i <= t; i++)
if(m > 9)
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\n", i);
return 0;
}
}
printf("No\n%d\n", f[t]);
return 0;
}

浙公网安备 33010602011771号