背包问题
/**
* 背包问题
* 有n件物品和一个最大承重为W的背包,每件物品的重量是w[i],价值是v[i],
* 在保证总重量不超过 W 的前提下,选择某些物品装入背包,背包的最大总价值是多少?
* 注意:每个物品只有一件,也就是每个物品只能选择 0 件或者 1 件
*/
public class Bag {
public static int maxValue(int[] values, int[] weights, int max) {
if (values == null || values.length == 0) {
return 0;
}
if (weights == null || weights.length == 0) {
return 0;
}
if (max <= 0) {
return 0;
}
int dp[][] = new int[values.length + 1][max + 1];
for (int i = 1; i <= values.length; i++) {
for (int j = 1; j <= max; j++) {
// 选中的物品重量
int selectWeight = weights[i - 1];
// 如果选择的物品的重量超过最大承重
if (selectWeight > j) {
// 最大的价值 = 上一轮的最大价值(不选择该物品)
dp[i][j] = dp[i - 1][j];
} else {
// 选择该物品
dp[i][j] = Math.max(dp[i - 1][j], values[i - 1] + dp[i - 1][weights[i - 1]]);
}
}
}
return dp[values.length][max];
}
public static void main(String[] args) {
int[] values = {6, 3, 5, 4, 6};
int[] weights = {2, 2, 6, 5, 4};
int max = 10;
System.out.println(maxValue(values, weights, max));
}
}
本文来自博客园,作者:wjxuriel,转载请注明原文链接:https://www.cnblogs.com/my-blog-site/p/16254864.html

浙公网安备 33010602011771号