package bluebrige;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Package {
static int C=12;
static int [][]c=new int[7][13];
static int []v= {8,10,6,3,7,2};
static int []w= {4,6,2,2,5,1};
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
for(int i=0;i<c[0].length;i++) {
c[0][i]=0;
}
for(int j=1;j<c.length;j++) {
c[j][0]=0;
}
maxValue();
for(int i=0;i<c.length;i++) {
for(int j=0;j<c[0].length;j++) {
System.out.print(c[i][j]+" ");
}
System.out.println();
}
//回溯得到背包中装的物品
List list=new ArrayList();
for(int i=c.length-1;i>0;i--) {
if(c[i][C]==c[i-1][C]) {
continue;//装不装第i个物品价值都一样,说明最优化方案中不包括i
}
else {
list.add(i);
C-=w[i-1];//背包容量减去当前装入的物品重量
}
}
System.out.println(list);
}
public static void maxValue() {
for(int i=1;i<c.length;i++) {
for(int j=1;j<c[0].length;j++) {
if(j<w[i-1]) {
c[i][j]=c[i-1][j];//如果当前背包容量小于物品重量,则无法装入,装入i的价值与不装入i的价值是一样的
}
else {
c[i][j]=Integer.max(c[i-1][j], c[i-1][j-w[i-1]]+v[i-1]);//当前背包容量可以装下i,比较装之前和装之后的最优值,若装之后的最优值大,则装入
}
}
}
}
}