P1095 [NOIP2007 普及组] 守望者的逃离(DP)

P1095 [NOIP2007 普及组] 守望者的逃离(DP)

在每一秒可以进行三种操作:闪烁、休息、跑步,闪烁和休息涉及到能量的回复和使用,先计算闪烁得举例,在闪烁的举例的基础上去计算跑步的举例。
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;
}
上一篇:NOIP2007 字符串的展开


下一篇:【汇编语言实验三】编程、编译、连接、跟踪