package com.lmh.test.algorithm.dp;
public class Knapsack {
public static void main(String[] args) {
int capacity = 4;
int[] weights = {1, 4, 3};
int[] values = {15, 30, 20};
int n = weights.length;
System.out.println("最大值: " + knapSack(capacity, weights, values, n));
}
public static int knapSack(int capacity, int[] weights, int[] values, int n) {
int[][] dp = new int[n + 1][capacity + 1];
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= capacity; j++) {
if (i == 0 || j == 0) {
dp[i][j] = 0;
} else if (weights[i - 1] <= j) {
dp[i][j] = Math.max(dp[i - 1][j], values[i - 1] + dp[i - 1][j - weights[i - 1]]);
} else {
dp[i][j] = dp[i - 1][j];
}
}
}
for (int i = 0; i < dp.length; i++) {
for (int j = 0; j < dp[i].length; j++) {
System.out.print(dp[i][j] + " ");
}
System.out.println();
}
return dp[n][capacity];
}
}