zoukankan      html  css  js  c++  java
  • Day5

    DP为什么这么难受啊....

    luogu p1156

    题意

    ​ 小明掉井里了,这个井深为D,由于体能消耗,小明只能坚持10小时就要见上帝,幸运的是每隔一段时间有人给小明投垃圾,吃垃圾续命,不吃垃圾可以用来垫脚减少与井口的距离。问给出D和一段垃圾序列,以及对应的续命时间和垫脚高度,问小明能否或者出来,能则输出最小时间,否则输出最大苟命时间

    思路

    ​ 相关元素有时间、生命、高度、垃圾,由于每个垃圾可吃可不吃,故而dp的第一个维度给垃圾表示决策的阶段,

    然后关于时间、生命、高度,由于垃圾本身代表了时间,所以可以不用再考虑,现在只剩下生命与高度两个维度。经过分析(不想写了,其实是生命的上限并不确定,但是高度的上限是确定的,方便DP),选择了第二个维度为高度,然后dp值表示最大生命。

    ​ 然后这里存在两种思路,填表法,即根据上一个状态+当前决策来决定当前状态,即d[i]是由d[i-1]+对于i的决策来影响。或者是刷表法,d[i] + 对于i+1的决策来影响d[i+1]

    ​ 填表法:

    ​ 状态转移很好写,在dp的时候判断,如果填表更新了井口,也就意味着存在决策有解,那么直接break输出。否则,退出循环输出dp[n][0]。注意状态转移的条件和初始化

    ​ 刷表法:

    ​ 状态转移的考虑为:d[i+1] 的更新是由d[i]来完成的,注意前提,如果井口刷新则break,

    ​ 否则输出d[i][0]。

    今天又是糟糕的一天呐。

  • 相关阅读:
    Go
    Go
    Go -11 Go 框架beego的简单 create run
    文本处理工具之:grep sed awk
    Linux系统布置java项目
    docker 启动mysql 本地连接
    time
    多行查询数据合并成一行进行展示
    settings的使用
    xlsxwriter
  • 原文地址:https://www.cnblogs.com/backkom-buaa/p/11483357.html
Copyright © 2011-2022 走看看