/** * 有一个容量为4的背包,现在你有三个物品重量为 1,3,4 价值为15,20,30,要求放入的物品不能重复,求能放入物品的最大的价值 */ public class ZeroOnePackage { public static void main(String[] args) { int[] weight = {1, 3, 4}; int[] value = {15, 20, 30}; int maxValue = zeroOnePackage(3, 5, weight, value); System.out.println("maxValue = " + maxValue); } private static int zeroOnePackage(int m, int n, int[] weight, int[] value) { // m为物品数量,n + 1为背包容量,用数组index代表容量 int[][] dp = new int[m][n + 1]; for (int i = 0; i < n; i++) { if (i >= 1) dp[0][i] = 15; } for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { if (j >= weight[i]) { dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); } else { dp[i][j] = dp[i - 1][j]; } } } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { System.out.print(dp[i][j] + " "); } System.out.println(); } return dp[m - 1][n]; } }
经典01背包问题
最新推荐文章于 2024-07-29 18:00:00 发布