Skip to content

Commit f8452a2

Browse files
committed
update dp 4
1 parent 855f6b7 commit f8452a2

File tree

3 files changed

+42
-48
lines changed

3 files changed

+42
-48
lines changed

lintcode/562.backpack-iv.cpp

+14-17
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,19 @@ class Solution {
4545
int backPackIV(vector<int> &nums, int target) {
4646
// write your code here
4747
int n = nums.size();
48-
int m = target;
49-
vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));
48+
vector<vector<int>> dp(n + 1, vector<int>(target + 1, 0));
5049
dp[0][0] = 1;
5150
for (int i = 1; i <= n; i++) {
52-
for (int j = 0; j <= m; j++) {
53-
int w = nums[i - 1];
54-
if (w <= j) {
55-
dp[i][j] = dp[i - 1][j] + dp[i][j - w];
56-
} else {
57-
dp[i][j] = dp[i - 1][j];
51+
for (int j = 0; j <= target; j++) {
52+
int weight = nums[i - 1];
53+
dp[i][j] = dp[i - 1][j];
54+
if (j >= weight) {
55+
dp[i][j] += dp[i][j - weight];
5856
}
5957
}
6058
}
6159

62-
return dp[n][m];
60+
return dp[n][target];
6361
}
6462
};
6563

@@ -73,18 +71,17 @@ class Solution {
7371
int backPackIV(vector<int> &nums, int target) {
7472
// write your code here
7573
int n = nums.size();
76-
int m = target;
77-
vector<int> dp(m + 1, 0);
74+
vector<int> dp(target + 1, 0);
7875
dp[0] = 1;
7976
for (int i = 1; i <= n; i++) {
80-
for (int j = 0; j <= m; j++) {
81-
int w = nums[i - 1];
82-
if (w <= j) {
83-
dp[j] = dp[j] + dp[j - w];
84-
}
77+
for (int j = 0; j <= target; j++) {
78+
int weight = nums[i - 1];
79+
if (j >= weight) {
80+
dp[j] += dp[j - weight];
81+
}
8582
}
8683
}
8784

88-
return dp[m];
85+
return dp[target];
8986
}
9087
};

lintcode/562.backpack-iv.py

+18-17
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,19 @@ class Solution:
4848
def back_pack_i_v(self, nums: List[int], target: int) -> int:
4949
# write your code here
5050
n = len(nums)
51-
m = target
52-
dp = [[0 for j in range(m + 1)] for i in range(n + 1)]
53-
dp[0][0] = 1
51+
dp = [[0] * (target + 1) for i in range(n + 1)]
52+
53+
for i in range(n + 1):
54+
dp[i][0] = 1
55+
5456
for i in range(1, n + 1):
55-
for j in range(m + 1):
56-
w = nums[i - 1]
57-
if w <= j:
58-
dp[i][j] = dp[i - 1][j] + dp[i][j - w]
59-
else:
60-
dp[i][j] = dp[i - 1][j]
57+
for j in range(1, target + 1):
58+
dp[i][j] = dp[i - 1][j]
59+
weight = nums[i - 1]
60+
if j >= weight:
61+
dp[i][j] += dp[i][j - weight]
6162

62-
return dp[n][m]
63+
return dp[n][target]
6364

6465
class Solution:
6566
"""
@@ -70,13 +71,13 @@ class Solution:
7071
def back_pack_i_v(self, nums: List[int], target: int) -> int:
7172
# write your code here
7273
n = len(nums)
73-
m = target
74-
dp = [0 for j in range(m + 1)]
74+
dp = [0 for i in range(target + 1)]
7575
dp[0] = 1
76+
7677
for i in range(1, n + 1):
77-
for j in range(m + 1):
78-
w = nums[i - 1]
79-
if w <= j:
80-
dp[j] = dp[j] + dp[j - w]
78+
for j in range(1, target + 1):
79+
weight = nums[i - 1]
80+
if j >= weight:
81+
dp[j] += dp[j - weight]
8182

82-
return dp[m]
83+
return dp[target]

test/python.py

+10-14
Original file line numberDiff line numberDiff line change
@@ -8,34 +8,30 @@
88
List,
99
)
1010

11-
from typing import (
12-
List,
13-
)
14-
1511
class Solution:
1612
"""
17-
@param nums: an integer array and all positive numbers
13+
@param nums: an integer array and all positive numbers, no duplicates
1814
@param target: An integer
1915
@return: An integer
2016
"""
21-
def back_pack_v(self, nums: List[int], target: int) -> int:
17+
def back_pack_i_v(self, nums: List[int], target: int) -> int:
2218
# write your code here
2319
n = len(nums)
24-
dp = [0] * (target + 1)
25-
dp[0] = 1
20+
dp = [[0] * (target + 1) for i in range(n + 1)]
21+
22+
for i in range(n + 1):
23+
dp[i][0] = 1
2624

2725
for i in range(1, n + 1):
28-
tmp = list(dp)
2926
for j in range(1, target + 1):
27+
dp[i][j] = dp[i - 1][j]
3028
weight = nums[i - 1]
3129
if j >= weight:
32-
tmp[j] = dp[j] + dp[j - weight]
33-
34-
dp = tmp
35-
return dp[target]
30+
dp[i][j] += dp[i][j - weight]
3631

32+
return dp[n][target]
3733

3834

3935
s = Solution()
40-
res = s.back_pack_v([1,2,3,3,7], 7)
36+
res = s.back_pack_i_v([2,3,4,5], 7)
4137
print(res)

0 commit comments

Comments
 (0)