洛谷P1156 垃圾陷阱 背包DP

题目大意:一头牛被困在一个初始为空的垃圾坑里,之后会扔下一些垃圾。每个垃圾都可以用来吃或堆放,并且堆放垃圾不用花费时间。这头牛开始时有足够持续10小时的能量,给定一些垃圾扔下的时间、高度与吃掉能提供的能量,输出最早什么时候可以爬出;否则输出最长存活时间。

对于一个垃圾有两种选择:吃掉或堆积。可以想到是类似背包问题。吃掉垃圾能延长存活时间,堆积垃圾可以增加高度,而答案输出的是达到一定高度的时间,所以设计出状态f[i]代表达到高度i的能量最大值(即达到高度i最长能活多久),则有状态转移方程f[i+a[j].h]=max(f[i+a[j].h],f[i]),即用当前高度的能量更新堆放这个垃圾之后所处高度的能量。
需要注意的是,应先按照垃圾扔下的时间给垃圾排序,如果到达这个高度的能量小于垃圾扔下的时间就要跳过对于这个垃圾的处理。

#include <cstdio>
#include <algorithm>
#define max(a,b) (a>b?a:b)
using namespace std;
struct garbage{
    int e,h,t;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值