首页 > 其他 > 详细

洛谷P1095 守望者的逃离

时间:2020-05-16 21:06:44      阅读:55      评论:0      收藏:0      [点我收藏+]

题目描述

一个人的跑步速度为17m/s, 他可以释放技能瞬移每次消耗10点魔力,移动60m,需要1秒时间,如果站到原地不动休息,每秒恢复4点魔力,给出由初始位置走到终点的距离 s ,初始魔力 m ,时间限制 t;

输入:m s t
输出:第一行输出是否可以按要求跑到终点,能就输出Yes,否则输出No,如果第一行是Yes,第二行输出最短时间,如果是No,输出跑的最长的距离

思路:将两种方法分开处理,先算只用技能的一组数据,然后用普通方式更新每一组数据,从前到后求出最优解

代码如下:

#include<bits/stdc++.h>

using namespace std;

int m,s,t;
int f[300010];

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;     //不能就原地恢复
    }
    
    for(int i = 1;i <= t;i++)
    {
        f[i] = max(f[i], f[i-1] + 17);  //求出最优解
        if(f[i] >= s)
        {
            cout << "Yes" << endl;
            cout << i << endl;
            return 0;
        }
    }
    
    cout << "No\n" << f[t] << endl;
    
    return 0;
}

洛谷P1095 守望者的逃离

原文:https://www.cnblogs.com/zcxy/p/12902014.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!