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

      

    题目描述

    恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。守望者的跑步速度为17m/s17m/s,以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在1s1s内移动60m60m,不过每次使用闪烁法术都会消耗魔法值1010点。守望者的魔法值恢复的速度为44点/s/s,只有处在原地休息状态时才能恢复。

    现在已知守望者的魔法初值MM,他所在的初始位置与岛的出口之间的距离SS,岛沉没的时间TT。你的任务是写一个程序帮助守望者计算如何在最短的时间内逃离荒岛,若不能逃出,则输出守望者在剩下的时间内能走的最远距离。注意:守望者跑步、闪烁或休息活动均以秒(s)(s)为单位,且每次活动的持续时间为整数秒。距离的单位为米(m)(m)。

    输入输出格式

    输入格式:

    共一行,包括空格隔开的三个非负整数M, S, TM,S,T。

    输出格式:

    共两行。

    11行为字符串“YesYes”或“NoNo”(区分大小写),即守望者是否能逃离荒岛。

    22行包含一个整数。第一行为“YesYes”(区分大小写)时表示守望者逃离荒岛的最短时间;第一行为“NoNo”(区分大小写)时表示守望者能走的最远距离。

    输入输出样例

    输入样例#1: 复制
    39 200 4
    
    输出样例#1: 复制
    No
    197
    
    输入样例#2: 复制
    36 255 10
    输出样例#2: 复制
    Yes
    6


    挺有意思的一道情景dp题
    一共有三种决策:
    1.停留1s
    2.闪现
    3.跑步

    一开始二维dp i表示时间 j表示魔法值 往后转移
    有两个点过不了

    因为j是上下交替的 没法滚动。
    (其实显然m要增加的!!! 不改变m值也能ac8个点 没话讲) 增加了更加MLE
    #include<bits/stdc++.h>
    using namespace std;
    //input by bxd
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define repp(i,a,b) for(int i=(a);i>=(b);--i)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m)
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s);
    #define ll long long
    #define pb push_back
    #define REP(i,N)  for(int i=0;i<(N);i++)
    #define CLR(A,v)  memset(A,v,sizeof A)
    //////////////////////////////////
    #define inf 0x3f3f3f3f
    #define lson l,m,pos<<1
    #define rson m+1,r,pos<<1|1
    const int N=6000;
    int dp[30000+5][1000+5];
    
    int main()
    {
        int m,s,t;
        RIII(m,s,t);
        CLR(dp,-0x3f);
    
        dp[0][m]=0;
    
        int maxx=0;
        int flag=-1;
        rep(i,0,t-1)
        {
            rep(j,0,m)
            {
                if(dp[i][j]>=0)
                {
                    dp[i+1][j]=max(dp[i+1][j],dp[i][j]+17),maxx=max(maxx,dp[i+1][j]);
                    dp[i+1][j+4]=max(dp[i+1][j+4],dp[i][j]),maxx=max(maxx,dp[i+1][j+4]);
                    if(j>=10)
                    dp[i+1][j-10]=max(dp[i+1][j-10],dp[i][j]+60),maxx=max(maxx,dp[i+1][j-10]);
                    if(maxx>=s&&flag==-1){flag=i+1;}
                }
            }
        }
        if(maxx>=s)
        {
            printf("Yes
    %d",flag);
        }
        else
        {
            printf("No
    %d",maxx);
        }
    
    
        return 0;
    }
    View Code
    显然闪现的优先级要高于跑步  

    所以两转移即可:
    #include<bits/stdc++.h>
    using namespace std;
    //input by bxd
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define repp(i,a,b) for(int i=(a);i>=(b);--i)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m)
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s);
    #define ll long long
    #define pb push_back
    #define REP(i,N)  for(int i=0;i<(N);i++)
    #define CLR(A,v)  memset(A,v,sizeof A)
    //////////////////////////////////
    #define inf 0x3f3f3f3f
    #define lson l,m,pos<<1
    #define rson m+1,r,pos<<1|1
    const int N=6000;
    int dp[300000+5];
    
    int main()
    {
        int m,s,t;
        RIII(m,s,t);
        CLR(dp,0);
    
        rep(i,1,t)
        {
            if(m>=10)dp[i]=dp[i-1]+60,m-=10;
            else dp[i]=dp[i-1],m+=4;
        }
    
        rep(i,1,t)
        {
            dp[i]=max(dp[i],dp[i-1]+17);
            if(dp[i]>=s)
            {
                printf("Yes
    %d",i);return 0;
            }
        }
        printf("No
    %d",dp[t]);
    
    
        return 0;
    }
    View Code










  • 相关阅读:
    Springboot 之 自定义配置文件及读取配置文件
    SQLSERVER系统视图 sql server系统表详细说明
    MySQL Workbench建表时 PK NN UQ BIN UN ZF AI 的含义
    使用Ecplise git commit时出现"There are no stages files"
    maven添加sqlserver的jdbc驱动包
    java将XML文档转换成json格式数据
    java将XML文档转换成json格式数据
    cannot be resolved. It is indirectly referenced from required .class files
    org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.util.Date from String value '2012-12-12 12:01:01': not a valid representation (error: Can not parse date "2012-12-
    @Autowired注解和静态方法 NoClassDefFoundError could not initialize class 静态类
  • 原文地址:https://www.cnblogs.com/bxd123/p/10857803.html
Copyright © 2011-2022 走看看