package test;
/*
* 动态规划之详细分析0-1背包问题
* 有 N 件物品和一个容量为 V 的背包。
* 第 i 件物品的费用是 w[i],价值是 v[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
/*
* 动态规划之详细分析0-1背包问题
* 有 N 件物品和一个容量为 V 的背包。
* 第 i 件物品的费用是 w[i],价值是 v[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
* */
package test;
/*
* 动态规划之详细分析0-1背包问题
* 有 N 件物品和一个容量为 V 的背包。
* 第 i 件物品的费用是 w[i],价值是 v[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
* */
public class BagQuestion {
public static int getMax(int[] w,int[] v,int allWeight) {
int[][] dp = new int[w.length][allWeight+1];
for (int i = 0; i < dp.length; i++) {
for (int j = 0; j < dp[0].length; j++) {
if(i==0 || j==0) {
dp[i][j] =0;
}else if(j<w[i]) {
dp[i][j] = dp[i-1][j];
}else if(j>=w[i]) {
int temp1 = dp[i-1][j];
int temp2 = dp[i-1][j-w[i]]+v[i];
int max = temp1>temp2?temp1:temp2;
dp[i][j] = max;
}
}
}
return dp[w.length-1][allWeight];
}
public static void main(String[] args) {
int[] w = {0,3,4,5};//重量的列表
int[] v = {0,4,5,6};//价值的列表
int allWeight = 10;
System.out.println(getMax(w, v, allWeight));
}
}