LintCode 92: Backpack (經典01揹包問題)
阿新 • • 發佈:2018-12-16
經典01揹包問題。 DP solution。 Time complexity O(nm),n is the # of items, m is the packet size。 Space complexity O(m)。 注意:k迴圈必須從大到小 (對01揹包和重複揹包)。而如果是完全揹包的話,可以是從小到大,從而實現優化。
class Solution { public: /** * @param m: An integer m denotes the size of a backpack * @param A: Given n items with size A[i] * @return: The maximum size */ int backPack(int m, vector<int> &A) { int n = A.size(); vector<int> dp(m + 1, 0); for (int i = 0; i < n; ++i) { for (int k = m; k >= A[i]; --k) { //必須是從大到小 dp[k] = max(dp[k], dp[k - A[i]] + A[i]); } } return dp[m]; } };