Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 97f6a41

Browse files
committed
Create Pack-2DCostPack.py
1 parent 5409045 commit 97f6a41

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
class Solution:
2+
# 思路 1:动态规划 + 三维基本思路
3+
def twoDCostPackMethod1(self, weight: [int], volume: [int], value: [int], W: int, V: int):
4+
size = len(weight)
5+
dp = [[[0 for _ in range(V + 1)] for _ in range(W + 1)] for _ in range(size + 1)]
6+
7+
# 枚举前 i 组物品
8+
for i in range(1, N + 1):
9+
# 枚举背包装载重量
10+
for w in range(W + 1):
11+
# 枚举背包装载容量
12+
for v in range(V + 1):
13+
# 第 i - 1 件物品装不下
14+
if w < weight[i - 1] or v < volume[i - 1]:
15+
# dp[i][w][v] 取「前 i - 1 件物品装入装载重量为 w、装载容量为 v 的背包中的最大价值」
16+
dp[i][w][v] = dp[i - 1][w][v]
17+
else:
18+
# dp[i][w][v] 取所有 dp[w - weight[i - 1]][v - volume[i - 1]] + value[i - 1] 中最大值
19+
dp[i][w][v] = max(dp[i - 1][w][v], dp[i - 1][w - weight[i - 1]][v - volume[i - 1]] + value[i - 1])
20+
21+
return dp[size][W][V]
22+
23+
# 思路 2:动态规划 + 滚动数组优化
24+
def twoDCostPackMethod2(self, weight: [int], volume: [int], value: [int], W: int, V: int):
25+
size = len(weight)
26+
dp = [[0 for _ in range(V + 1)] for _ in range(W + 1)]
27+
28+
# 枚举前 i 组物品
29+
for i in range(1, N + 1):
30+
# 逆序枚举背包装载重量
31+
for w in range(W, weight[i - 1] - 1, -1):
32+
# 逆序枚举背包装载容量
33+
for v in range(V, volume[i - 1] - 1, -1):
34+
# dp[w][v] 取所有 dp[w - weight[i - 1]][v - volume[i - 1]] + value[i - 1] 中最大值
35+
dp[w][v] = max(dp[w][v], dp[w - weight[i - 1]][v - volume[i - 1]] + value[i - 1])
36+
37+
return dp[W][V]

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /