92. 背包問題

描述

在n個物品中挑選若干物品裝入背包,最多能裝多滿?假設(shè)背包的大小為m,每個物品的大小為A[i]。

樣例

樣例 1:
    輸入:  [3,4,8,5], backpack size=10
    輸出:  9

樣例 2:
    輸入:  [2,3,5,7], backpack size=12
    輸出:  12

思路:

設(shè)dp[i][j]為前i個物品是否能拼成重量j。則dp[i][j]=true取決于兩種情況:
1.前i-1個物品能夠拼成重量j
2.前i-1個物品能夠拼成重量j-A[i-1]。
具體實現(xiàn)如下。

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) {
        // write your code here
        int n=A.size();
        if(!n)
        {
            return 0;
        }
        vector<vector<bool>> dp(n+1,vector<bool>(m+1,false));
        for(int i=0;i<=n;i++)
        {
            dp[i][0]=true;
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                dp[i][j]=dp[i-1][j];
                if(j-A[i-1]>=0)
                {
                    dp[i][j]=dp[i][j]||dp[i-1][j-A[i-1]];
                }
            }
        }
        for(int i=m;i>=0;i--)
        {
            if(dp[n][i])
            {
               return i; 
            }
        }
        return 0;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容