zoukankan      html  css  js  c++  java
  • Backpack III 完全背包

    Given n kind of items with size Ai and value Vi( each item has an infinite number available) and a backpack with size m. What's the maximum value can you put into the backpack?

    Given 4 items with size [2, 3, 5, 7] and value [1, 5, 2, 4], and a backpack with size 10. The maximum value is 15.

    完全背包问题,即每件物体可取任意件。dp[i,j]表示为前i个物体填满背包可获得的最大价值。DP方程转换为dp[i,j] = max(dp[i-1,j], dp[i, j - Ai] + Vi)。这样转换的复杂度为O(NV),要快于从0-1背包转化过来的从i-1上讨论的转化方程O(NV^2)。

    注意这里与0-1背包不一样因为第i件物品可以添加多件.所以DP可以在已加入当前物体的状态下继续添加.

    代码入下:

    class Solution:
        # @param {int[]} A an integer array
        # @param {int[]} V an integer array
        # @param {int} m an integer
        # @return {int} an array
        def backPackIII(self, A, V, m):
            n = len(A)
            dp = [0] * (m + 1)
            for i in xrange(n):
                for j in xrange(A[i], m + 1):
                    dp[j] = max(dp[j], dp[j - A[i]] + V[i])
            
            return dp[m]
  • 相关阅读:
    vue 部署到服务器
    半小时学会 Vuex 数据共享
    Vue 第一次安装 经历 vue cli 3.0
    第一次使用视频截图 ant design
    Luckysheet
    关于导出--分页
    ADO.net很重要
    委托到底是什么? (转载)
    生成流水单号
    Ext.NET 基础学习笔记07 (GridPanel用法)
  • 原文地址:https://www.cnblogs.com/sherylwang/p/5681585.html
Copyright © 2011-2022 走看看