zoukankan      html  css  js  c++  java
  • 125. 背包问题 II

    125. 背包问题 II

    中文English

    有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小和数组 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
    

    挑战

    O(nm) 空间复杂度可以通过, 不过你可以尝试 O(m) 空间复杂度吗?

    注意事项

    1. A[i], V[i], n, m 均为整数
    2. 你不能将物品进行切分
    3. 你所挑选的要装入背包的物品的总大小不能超过 m
    4. 每个物品只能取一次

    输入测试数据 (每行一个参数)如何理解测试数据?

    class Solution:
        """
        @param m: An integer m denotes the size of a backpack
        @param A: Given n items with size A[i]
        @param V: Given n items with value V[i]
        @return: The maximum value
        """
        '''
        大致思路:
        1.给出所有组合
        2.初始化p=0,判断如果sum总重量小于m,并且大于p的话,则重置p,最终返回p即可
        '''
        def backPackII(self, m, A, V):
            d = []
            res = []
            for i in range(len(A)):
                if i == 0:
                    d.append([A[i]])
                    res.append(V[i])
                else:
                    for j in range(len(d)):
                        d.append(d[j] + [A[i]])
                        res.append(res[j] + V[i])
                    d.append([A[i]])  
                    res.append(V[i])   
    
            p = 0
            for z in range(len(d)):
                if sum(d[z]) <= m and res[z] > p:
                    p = res[z]
            return p

    注:lintcode未通过,你的代码内存使用超过了限制,检查你的空间复杂度。MLE通常是由多余的二维数组造成的。

     
  • 相关阅读:
    Jmeter索引贴
    Jenkins Jmeter Tomcat Html实施方案
    转载:几种方法来实现scp拷贝时无需输入密码
    Jenkins Jmeter Ant Email Html实施方案
    zabbix3.4 zabbix-server zabbix-agent zabbix-java-gateway安装 配置
    shell () {}
    Vuser中常用的C语言函数
    loadrunner C语言循环for while do...while
    loadrunner C语言switch case
    linux系统扫描技术及安全防范--------待补全
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12831466.html
Copyright © 2011-2022 走看看