LintCode 125. 背包问题 II(DP)
生活随笔
收集整理的這篇文章主要介紹了
LintCode 125. 背包问题 II(DP)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 題目
有 n 個物品和一個大小為 m 的背包.
給定數(shù)組 A 表示每個物品的大小
數(shù)組 V 表示每個物品的價值.
問最多能裝入背包的總價值是多大?
樣例 1: 輸入: m = 10, A = [2, 3, 5, 7], V = [1, 5, 2, 4] 輸出: 9 解釋: 裝入 A[1] 和 A[3] 可以得到最大價值, V[1] + V[3] = 9 樣例 2: 輸入: m = 10, A = [2, 3, 8], V = [2, 5, 8] 輸出: 10 解釋: 裝入 A[0] 和 A[2] 可以得到最大價值, V[0] + V[2] = 10挑戰(zhàn)
O(nm) 空間復雜度可以通過, 不過你可以嘗試 O(m) 空間復雜度嗎?
注意事項
A[i], V[i], n, m 均為整數(shù)
你不能將物品進行切分
你所挑選的要裝入背包的物品的總大小不能超過 m
每個物品只能取一次
2. 解題
- dp[i][j]dp[i][j]dp[i][j] 表示第i 件物品下,重量為 j 時的物品價值
- 每件物品只可取一次,取或者不取,第一件時,dp[0][0] = 0, dp[0][A[0]] = V[0]
- 從第二件開始,從上面已有的狀態(tài)里,生成新的狀態(tài),填寫狀態(tài)表
- 由狀態(tài)方程可看出,每次新狀態(tài)只與上一行有關(guān),可以進行壓縮,代碼略。
100% 數(shù)據(jù)通過測試
總耗時 50 ms
您的提交打敗了 99.80% 的提交!
總結(jié)
以上是生活随笔為你收集整理的LintCode 125. 背包问题 II(DP)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 396. 旋转函数(数
- 下一篇: LeetCode 454. 四数相加 I