第三周-1.2背包问题1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oytf10001/article/details/88594739

                             背包问题1


描述

n种物品,每种物品有相应的价值和体积,同时物品还分为两类,一类是“单个物品”,即该种物品只有一个;一类是“多个物品”,即该种物品有无限个。

现在你有一个体积为V的背包,那么该装些什么物品到背包里使得价值之和最大呢?

输入

第一行包含两个正整数n,V。

接下来n行,每行代表一种物品。每行的第一个数字表示该物品的种类(若为0表示“单个物品”,若为1表示“多个物品”),第二个数字表示该物品的价值,第三个数字表示该物品的体积。

输出

输出一个整数,表示最大的价值之和。

样例1输入

5 8
0 6 8
0 7 3
1 1 1
0 8 1
0 5 2

样例1输出

22

样例1解释

第三种物品有无限个,其余都是单个物品。

若我们放入物品1,则背包已经装满,此时价值和为6;

若我们放入物品2、4、5,背包所剩体积为8-3-1-2=2,此时价值和为7+8+5=20;

若我们放入8个物品3,背包装满,此时价值之和为8×1=8;

若我们放入物品2、4、5,再放两个物品3,则背包装满,此时价值和为7+8+5+2×1=22。

可以验证,最优答案就是22。

扫描二维码关注公众号,回复: 5557555 查看本文章

样例2

请查看下发文件内的sample2_input.txt和sample2_output.txt。

限制

对于30%的数据,n,V ≤ 20;

对于100%的数据,n,V ≤ 5000。

保证数据中所有的整数均为正整数,且不超过5000。

时间:6 sec

空间:512 MB

提示

[经典的01背包和完全背包问题。]

另外,为了帮助大家完成题目,我们提供了只包含了输入输出功能的程序模板,也提供了含有算法的大部分实现细节的程序。

你可以根据自己的实际情况,在这些程序的基础上进行作答,或不参考这些程序,这将与你的得分无关。

这些程序可以从【这里】下载。

猜你喜欢

转载自blog.csdn.net/oytf10001/article/details/88594739