• 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通常是由多余的二维数组造成的。

     
  • 相关阅读:
    数据库-自定义函数
    数据库-存储过程
    数据库配置
    水电费管理系统需求分析与设计_待完善
    SQL中Group By的使用
    部分查询功能语句
    10-11数据库练习
    Oracle-SQL
    开发环境之Gradle
    解决程序端口占用
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12831466.html
Copyright © 2020-2023  润新知