From 500da70e1f7b33a5c23bd8b347a292eed57a6b34 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Tue, 3 Apr 2018 13:50:31 +0800 Subject: [PATCH] auto commit --- notes/Leetcode 题解.md | 46 +++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/notes/Leetcode 题解.md b/notes/Leetcode 题解.md index b29be266..39353633 100644 --- a/notes/Leetcode 题解.md +++ b/notes/Leetcode 题解.md @@ -2052,19 +2052,18 @@ public int lengthOfLCS(int[] nums1, int[] nums2) { ```java public int knapsack(int W, int N, int[] weights, int[] values) { - int[][] dp = new int[N][W]; - for (int i = W - 1; i >= 0; i--) { - dp[0][i] = i > weights[0] ? values[0] : 0; - } - for (int i = 1; i < N; i++) { - for (int j = W - 1; j >= weights[i]; j--) { - dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weights[i]] + values[i]); - } - for (int j = weights[i] - 1; j >= 0; j--) { - dp[i][j] = dp[i - 1][j]; + int[][] dp = new int[N + 1][W + 1]; + for (int i = 1; i <= N; i++) { + int w = weights[i - 1], v = values[i - 1]; + for (int j = 1; j <= W; j++) { + if (j >= w) { + dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - w] + v); + } else { + dp[i][j] = dp[i - 1][j]; + } } } - return dp[N - 1][W - 1]; + return dp[N][W]; } ``` @@ -2074,7 +2073,22 @@ public int knapsack(int W, int N, int[] weights, int[] values) {