Java教程

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;
}
这篇关于P1095 [NOIP2007 普及组] 守望者的逃离(DP)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!