P1156 垃圾陷阱
1|0P1156 垃圾陷阱
基本思路
受这题的影响,我总觉得这题不应该直接把时间当作状态方程的值,于是搞了
显然,这个算法只能保证在无生命限制下的最优解,无法兼顾生命限制来求最优解。事实上我的
题解思路
首先分析题目
“每个垃圾都可以用来吃或堆放”,浓浓的透露出一个背包气息。我们可以类比背包问题的放或不放。于是
继续分析并使用排除法
我们需要求的答案是时间,于是很自然而然的想到
这时候我们发现,有4个值可能成为状态,高度,生命,物品和时间,难道要dp三维的吗?
再分析题目,每个垃圾都有一个下落的时间,奶牛一定是在垃圾丢下来的时间就处理垃圾的(可以得出这样的最优的),那么物品就可以和时间关联起来了。这时候,我们可以把时间仅仅当作干扰量给剔除了。
需要注意的是,物品的使用顺序并不是随意的,必须按它们下落的时间顺序来先后处理。(这里排一下序即可)
那么
一下子我们并不能得出答案。先尝试
值得一提的是,
据说这个是叫离线
状态转移方程
发现这是对的,然而我们再想想,在关于
所以我们再尝试讨论
状态转移方程
发现这样也是对的,而且
实现该转移方程DP
先讨论所谓的离线算法(我也不知道是不是这样叫的)
意思就是先处理完所有的状态奶牛可以达到的血量再与时间进行讨论
这里我们使用填表法(填表法就是利用状态转移方程和上一个状态来推导出现在的状态)
dp[0][0] = 10
,因为一开始有
需要非常非常注意的是状态的能否使用
对于以前的状态
最后扫一遍
这里的maxt实际只用讨论
在线的和刷表法
刷表法就是利用当前的状态,把有关联的下一状态都推出来
在线的思路是,
在这里我们边做边判断是否上去了并更新它的最长存活时间。
代码实现
__EOF__

本文链接:https://www.cnblogs.com/kdlyh/p/17810629.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下