-
和 Knapsack 差不多,只是多一個維度來算 Volume。
dp[i][j][k]
: 前i
個物品在W = j
和V = k
的限制下最大的 profit。0
ifi < 0
- 沒東西可以選
dp[i - 1][j][k]
ifi >= 0 && (j < w[i] || k < v[i])
- 放不下第
i
個物品
- 放不下第
max(dp[i - 1][j][k], dp[i - 1][j - w[i]][k - v[i]] + p[i])
ifi >= 0 && j >= w[i] && k >= v[i]
- 放不放第
i
個物品都試過
- 放不放第
- 最後答案在
dp[n - 1][W][V]
。
-
和前一個做法類似,但可以觀察到
dp[i - 2][*][*]
以前是不會在用到的。- 只留下
dp[i][*][*]
和dp[i - 1][*][*]
。- 實作上只用
dp[0][*][*]
和dp[1][*][*]
兩個交替使用。
- 實作上只用
- 最後答案在
dp[((n - 1) & 1)][W][V]
。
- 只留下
1122
Folders and files
Name | Name | Last commit date | ||
---|---|---|---|---|
parent directory.. | ||||