zoukankan      html  css  js  c++  java
  • P1095 守望者的逃离(dp)

    题目大意,每一秒有三种选择,闪现,每次移动60m,消耗10点蓝。

    跑步,每次移动17m,不耗蓝。 原地休息,回复4点蓝。

    给初始蓝值,目标距离,和时间。问能达的最短时间和不能到达的最远距离。

    题解:我们尽量都取闪现的方式,不够量就原地恢复,算出所能到达的最远距离。

    再在每一秒比较此距离与上一秒选择跑步的距离,从中取最大值。能达到就输出。时间到了还没到达目的地,就输出最大距离。

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    int dp[300005];
    int main(){
        int m,s,t;
        cin>>m>>s>>t;
        fill(dp,dp+300005,0);
        for(int i=1;i<=t;i++){///先算出全部采用闪现的最远距离
            if(m>=10){
                dp[i]=dp[i-1]+60;///距离等于上一秒加60
                m-=10;
            }
            else{
                dp[i]=dp[i-1];///距离等于上一秒的距离
                m+=4;
            }
        }
        for(int i=1;i<=t;i++){
            dp[i]=max(dp[i],dp[i-1]+17);///综合比较一下
            if(dp[i]>=s){
                cout<<"Yes"<<endl;
                cout<<i<<endl;
                return 0;
            }
        }
        cout<<"No"<<endl;
        cout<<dp[t]<<endl;
        return 0;
    }
    View Code

     

  • 相关阅读:
    NSDate 与NSString的互相转换
    NSArray 基础
    IOS 使用自定义字体
    页面跳转添加动画
    Builder 模式
    树的子结构
    Singleton 模式
    合并两个排序的链表(递归算法)
    合并两个排序的链表(非递归)
    反转链表
  • 原文地址:https://www.cnblogs.com/mohari/p/12952979.html
Copyright © 2011-2022 走看看