/**
*
* @param value 物品的价值
* @param volume 物品的体积
* @param capacity 背包的容量
*/
public void kanpSack(int[] value, int[] volume, int capacity){
//res[i][j]表示第i个物品放入容量为j的背包中
int[][] res = new int[value.length + 1][capacity + 1];
//背包容量为0时,价值为0
for (int i = 0; i < res.length; i++){
res[i][0] = 0;
}
//背包内不放入物品时,价值为0
for (int i = 0; i < res[0].length; i++){
res[0][i] = 0;
}
for (int i = 1; i < res.length; i++){
for (int j = 1; j < res[0].length; j++){
//如果第i个物品的体积大于背包容量,res[i][j]就等于第i - 2个物品放入容量为j的背包中的价值,即res[i - 1][j]
if(volume[i - 1] > j){
res[i][j] = res[i - 1][j];
}else{
//如果第i个物品的体积小于等于背包容量,
//如果不把第i个物品放入背包,价值仍为res[i - 1][j],
//如果把第i个物品放入背包,背包的剩余容量为j-volume[i-1],此时背包的价值为value[i - 1] + res[i - 1][j - volume[i - 1]]
//是否把第i个物品放入背包取决于哪种情况下的背包价值更大
if (res[i - 1][j] < value[i - 1] + res[i - 1][j - volume[i - 1]]){
res[i][j] = value[i - 1] + res[i - 1][j - volume[i - 1]];
path[i][j] = 1;
}else{
res[i][j] = res[i - 1][j];
}
}
}
}
System.out.println(res[value.length][capacity]);
}