假设我们有n种类型的物品,分别编号为1, 2...n。其中编号为i的物品价值为vi,它的重量为wi。为了简化问题,假定价值和重量都是整数值。现在,假设我们有一个背包,它能够承载的重量是Cap。现在,我们希望往包里装这些物品,使得包里装的物品价值最大化,那么我们该如何来选择装的东西呢?
注意:每种物品只有一件,可以选择放或者不放。初始化数据为:n=5,w={2,2,6,5,4},v={6,3,5,4,6},Cap=10。
递推公式:
dp[ i ][ j ]:【0,i】物品任取放容量为j的背包。
不放物品i:dp[ i-1 ][ j ]
放物品i:dp[ i-1 ][ j - weight[ i ]] + value[ i ];
如果不放物品i,则当前的dp[ i ][ j ] = dp[ i-1 ][ j ];
如果放物品i:背包容量减去物品i的容量所能放的最大价值加上物品i的价值。
源代码如下:
import java.util.Scanner;
public class BackPackZeroOne {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//物品的数量
int num = sc.nextInt();
//背包最大重量
int max = sc.nextIn

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



