01背包+贪心~能量石

本文介绍了如何使用动态规划解决一个能量石问题,其中能量石随时间失去能量,目标是找到获得最大能量的策略。通过设置时间上界并按能量石能量损失率排序,建立状态转移方程,实现贪心策略,找出最优解。
摘要由CSDN通过智能技术生成

原题目链接。
本文所参考的题解。

题目描述

岩石怪物杜达生活在魔法森林中,他在午餐时收集了 N 块能量石准备开吃。
由于他的嘴很小,所以一次只能吃一块能量石。
能量石很硬,吃完需要花不少时间。
吃完第 i 块能量石需要花费的时间为 Si 秒。
杜达靠吃能量石来获取能量。
不同的能量石包含的能量可能不同。
此外,能量石会随着时间流逝逐渐失去能量。
第 i 块能量石最初包含 Ei 单位的能量,并且每秒将失去 Li 单位的能量。
当杜达开始吃一块能量石时,他就会立即获得该能量石所含的全部能量(无论实际吃完该石头需要多少时间)。
能量石中包含的能量最多降低至 0。
请问杜达通过吃能量石可以获得的最大能量是多少?

输入格式

第一行包含整数 T,表示共有 T 组测试数据。
每组数据第一行包含整数 N,表示能量石的数量。
接下来 N 行,每行包含三个整数 Si,Ei,Li。

输出格式

每组数据输出一个结果,每个结果占一行。
结果表示为 Case #x: y,其中 x 是组别编号(从 1 开始),y 是可以获得的最大能量值。

数据范围

在这里插入图片描述

输入样例

3
4
20 10 1
5 30 5
100 30 1
5 80 60
3
10 4 1000
10 3 1000
10 8 1000
2
12 300 50
5 200 0

输出样例

Case #1: 105
Case #2: 8
Case #3: 500

样例解释

在这里插入图片描述

解释

〇解题思路参考于:
在这里插入图片描述
①如果做的不是关于动态规划的专题,这道题我可能想不到会用dp来解,而我会用dfs来解。既然要沉下心学dp,就尝试用dp解一下。
②用dp解本题的第一个难处来了,01背包需要一个背包容量,最大装载量,一个上界,但是这道题目里没有明确给出上界,因此我们需要自己规定一个上界。显然,将所有能量石全部吃下,需要∑Si的时间,这个时间我们设置为t,因此时间t就是我们的上界,因为无论吸收了多少能量,把所有能量石全部吃完所需的时间都是t
③dp最重要的当属状态转移方程,但是这道题不可以盲目的枚举,因为能量石具有的能量会随着时间消逝,因此,显然地我们需要给能量石一个吃掉的顺序,再对它进行01背包的选择。这个顺序我们用sort函数进行安排,而排序的规则即是:
在这里插入图片描述
我们可以把它理解为,
在这里插入图片描述
注明:上述解题思路与方程来自于AcWing墨染空,此处截图仅供自己进行学习参考,不作其他用途。
我们知道,随着时间的流逝,有些宝石对总体的贡献会降低至0,那么我们可以如此交换ÿ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值