#1529. 宝藏猎人的背包
宝藏猎人的背包
故事背景
在古老的金字塔中,探险家发现了许多珍贵的宝藏。每个宝藏都有不同的价值和重量,而探险家的背包容量有限。为了最大化这次探险的收益,探险家需要精心选择哪些宝藏放入背包,甚至可以选择带走部分宝藏(如果背包还有空间的话)。作为探险队的技术顾问,你需要设计一个算法来帮助探险家做出最优的选择。
题目描述
给定一组宝藏,每个宝藏有重量 和价值 ,以及一个容量为 C 的背包。你可以选择将宝藏的一部分放入背包(即分数背包问题),要求放入背包的总重量不超过 C ,且总价值最大。
请编写一个 C++ 程序,计算在给定条件下,背包可以容纳的最大总价值。
输入格式
第一行输入两个整数 n 和 C ( ),分别表示宝藏的数量和背包的容量。
接下来 n 行,每行输入两个整数 和 ( ),分别表示第 i 个宝藏的重量和价值。
输出格式
输出一个浮点数,表示背包可以容纳的最大总价值,保留两位小数。
样例输入 1
3 50
10 60
20 100
30 120
样例输出 1
240.00
样例输入 2
2 10
5 10
8 15
样例输出 2
18.75
样例输入 3
4 100
25 50
50 100
30 75
15 30
样例输出 3
205.00
提示
- 这是一个经典的分数背包问题,贪心算法可以得到最优解
- 考虑如何排序宝藏,使得单位重量的价值最大化
- 注意处理背包容量不足时,可以选择部分宝藏的情况
- 输出结果需要保留两位小数