美文网首页
92. 背包问题

92. 背包问题

作者: 薄荷糖的味道_fb40 | 来源:发表于2019-05-18 23:44 被阅读0次

    描述

    在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i]。

    样例

    样例 1:
        输入:  [3,4,8,5], backpack size=10
        输出:  9
    
    样例 2:
        输入:  [2,3,5,7], backpack size=12
        输出:  12
    

    思路:

    dp[i][j]为前i个物品是否能拼成重量j。则dp[i][j]=true取决于两种情况:
    1.前i-1个物品能够拼成重量j
    2.前i-1个物品能够拼成重量j-A[i-1]
    具体实现如下。

    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;
        }
    };
    

    相关文章

      网友评论

          本文标题:92. 背包问题

          本文链接:https://www.haomeiwen.com/subject/wnnxzqtx.html