92.背包问题(lintcode)

注意j-A[i-1]必须大于等于0,只大于0会报错

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 length = A.size();
        vector<vector<bool>> result(length+1,vector<bool>(m+1));
        for(int i = 0;i <= m;i++)
            result[0][i] = false;
        for(int j = 0;j <= length;j++)
            result[j][0] = true;
        for(int i = 1;i <= length;i++){
            for(int j = 1;j <= m;j++){
                if((j-A[i-1]) >= 0)
                    result[i][j] = result[i-1][j-A[i-1]] || result[i-1][j];
                else
                    result[i][j] = result[i-1][j];
            }
        }
        int max = 0;
        for(int i = 1;i <= length;i++){
            for(int j = 1;j <= m;j++){
                if(result[i][j] == true){
                    if(j > max)
                        max = j;
                }
            }
        }
        return max;
    }
};
时间: 2024-08-10 11:13:31

92.背包问题(lintcode)的相关文章

92 背包问题

原题网址:https://www.lintcode.com/problem/backpack/description 描述 在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i] 你不可以将物品进行切割. 您在真实的面试中是否遇到过这个题?  是 样例 如果有4个物品[2, 3, 5, 7] 如果背包的大小为11,可以选择[2, 3, 5]装入背包,最多可以装满10的空间. 如果背包的大小为12,可以选择[2, 3, 7]装入背包,最多可以装满12的空间.

桌艘仁涛辽od8r81udljby2eb8n

http://www.qiushibaike.com/tag/%e9%82%a2%e5%8f%b0%e8%bf%b7%e5%a5%b8%e8%8d%af%e5%93%aa%e9%87%8c%e6%9c%89%e5%8d%96%2b%ef%bd%91%ef%bc%92%ef%bc%98%ef%bc%95%ef%bc%98%ef%bc%92%ef%bc%99%ef%bc%91%ef%bc%92%ef%bc%90.http://www.gxxc.gov.cn/Town/TownDetails?id=9

廴俏士芡芍o55o536zc6571gynd

http://www.gxxc.gov.cn/Town/TownDetails?id=94210&town=%e5%85%b4%e5%9f%8e%e5%93%aa%e9%87%8c%e6%9c%89%e6%b0%b0%e5%8c%96%e9%92%a0%e4%b9%b0%2b%ef%bd%91Q%e2%92%89%e2%92%8f%e2%92%8c%e2%92%8f%e2%92%89%e2%92%90%e2%92%88%e2%92%89O.http://www.qiushibaike.com/t

米胖涡壤糖r0kgjk681iwv9bnnmnd

http://www.qiushibaike.com/tag/%e6%99%8b%e5%b7%9e%e5%93%aa%e9%87%8c%e6%9c%89%e8%bf%b7%e5%b9%bb%e8%8d%af%e5%8d%96%2b%ef%bd%91%ef%bc%92%ef%bc%98%ef%bc%95%ef%bc%98%ef%bc%92%ef%bc%99%ef%bc%91%ef%bc%92%ef%bc%90.http://www.qiushibaike.com/tag/%e6%95%a6%e5%

沂腾烫扣刻az7a1ij0002mi

http://www.qiushibaike.com/tag/%e6%b2%85%e6%b1%9f%e5%93%aa%e9%87%8c%e6%9c%89%e6%b0%b0%e5%8c%96%e9%92%be%e5%8d%96%2b%ef%bd%91%ef%bc%92%ef%bc%98%ef%bc%95%ef%bc%98%ef%bc%92%ef%bc%99%ef%bc%91%ef%bc%92%ef%bc%90.http://www.qiushibaike.com/tag/%e6%97%a0%e6%

lintcode:背包问题

背包问题 在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i] 样例 如果有4个物品[2, 3, 5, 7] 如果背包的大小为11,可以选择[2, 3, 5]装入背包,最多可以装满10的空间. 如果背包的大小为12,可以选择[2, 3, 7]装入背包,最多可以装满12的空间. 函数需要返回最多能装满的空间大小. 解题 动态规划 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放. 用子问题定义状态:即f[i][j]前i个物品放入大小为j的空间

背包问题2 (lintcode)

这里: for(int j = 1;j <= m;j++) result[0][j] = 0x80000000; 不能从0开始,result[0][0]是可以取到的,是0.其他情况取不到才用最小表示. class Solution { public: /* * @param m: An integer m denotes the size of a backpack * @param A: Given n items with size A[i] * @param V: Given n item

[C++11][算法][穷举]输出背包问题的所有可满足解

关于背包问题的题目,前人之述备矣,这里只讨论实现 输入: n ca w_1 v_1 w_2 v_2 ... w_n v_n 其中,n是物品总数,ca是背包大小,w_n是第n个物品的重量,v_n是第n个物品的价值 输出: v_1 x v_2 x v_3 x ... 其中,v_n是当前情况为x时背包的价值,x是一串序列,由0,1组成,表示是否放入背包 如: 1001就表示第一个和最后一个物品放入背包,中间两个物品不放入 要求编写一个程序,输出所有可满足解. 思路很简单,就是穷举.穷举每一个情况. 伪

利用回溯法求解背包问题

最近看完了利用回溯法求八皇后问题,最后成功求解到92种解法,然后在看利用贪心求解背包问题,突然想到其实也可以利用回溯法求解背包问题,本质上回溯法是一个穷举的方式在求. 回溯法求解出的结果肯定是正确的,这也可以验证自己所写的贪心算法的正确性. 问题描诉: 设定Wmax为最大重量,W[](0~n-1)为编号0~n-1的货物重量,V[](0~n-1)为其价值,x[]为其中解, 在wn=ΣXi*Wi<Wmax的条件下,求Vmax=ΣXi*Vi. 代码如下: //全局变量最大价值int maxvalue=