zoukankan      html  css  js  c++  java
  • 洛谷P1095 守望者的逃离

    题目描述

    一个人的跑步速度为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
    " << f[t] << endl;
        
        return 0;
    }
    
  • 相关阅读:
    chapter4.6生成器
    chapter4.4、递归
    chapter4.3、函数执行流程
    chapter4.2、函数返回值
    直接插入排序
    打印三角型的练习
    杂记
    linux top命令
    makefile 中的 := , += ,?=
    makefile中的shell语法 || Makefile中的@
  • 原文地址:https://www.cnblogs.com/zcxy/p/12902014.html
Copyright © 2011-2022 走看看