经典算法背包问题
java代码实现
public static void ZeroOnePack(int V, int N, int[] weight, int[] value) {
//初始化动态规划数组 00为空
int[][] dp = new int[N + 1][V + 1];
//为了便于理解,将dp[i][0]和dp[0][j]均置为0,从1开始计算
//***二位数组,00为空,从一开始,横为容量1-100,竖为价值1-4,对象参数为最大的价值,动态规划数组***
for (int i = 1; i < N + 1; i++) {
//容量循环
for (int j = 1; j < V + 1; j++) {
//如果第i件物品的重量大于背包容量j,则不装入背包
//也就是公式装不下时B(N-1,W)
if (weight[i - 1] > j) {
dp[i][j] = dp[i - 1][j];
} else {
//当装的下时,B(K-1,W-Wk)+Vk,跟B(N-1,W)对比,大的写入表中
dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i - 1]] + value[i-1]);
}
}
}
System.out.println(dp[N][V]);
}
记录一下