问题描述
有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?
public class knapsack {
public static void main(String[] args) {
int w[]={0,2,2,6,5,4};
int []v= {0,6,3,5,4,6};
int [][]m=new int[6][11];
int []x=new int[10];
int c=10;
System.out.println("装入商品的最大价值为");
Knapsack(v,w,c,m);
System.out.println("装入的商品为:");
traceback(m,w,c,x);
}
public static void Knapsack(int v[],int w[],int c,int [][]m)
{ int n=v.length-1;
int jMax = Math.min(w[n]-1,c);//以下填最后一行,要么填0,要么填v[n]
for(int j=0; j<=jMax;j++)
m[n][j]=0;
for(int j=w[n]; j<=c; j++)
m[n][j] = v[n];
for(int i=n-1; i>1; i--)
{ jMax =Math.min(w[i]-1,c);
for(int j=0; j<=jMax; j++)//背包剩余容量j<=jMax<c