美文网首页
7.01背包问题

7.01背包问题

作者: 你好宝宝 | 来源:发表于2020-03-17 14:19 被阅读0次

问题描述

有4个物品,体积:2,3,4,5 。价值:3,4,5,6。背包容量:8。使用该背包装这些物品所能得到的最大价值。

思路

i表示当前物品的编号,j表示背包的剩余容量,w[i]表示当前物品的体积,v[i]表示物品的价值。分两种中情况讨论:

  • 当前物品的体积大于背包的剩余体积
  • 当前物品的体积小于等于背包的剩余体积
    通过构造物品编号i与剩余体积j的表可以求出最优解

v[i][j]= \begin{cases} v[i-1][j]& w[i]>j\\ max(v[i-1][j],v[i-1][j-w(i)]) & w[i]<=j \end{cases}

代码

import prettytable as pt

if __name__ == "__main__":
    w = [0, 2, 3, 4, 5]  # 体积
    v = [0, 3, 4, 5, 6]  # 价值

    bag = 8

    table = [[0]*(bag+1) for i in range(len(w))]

    for i in range(1, len(table)):  # 编号
        for vol in range(1, len(table[0])):  # 剩余容量
            if w[i] > vol:  # 如果放不下
                table[i][vol] = table[i-1][vol]
            else:  # 如果能放下
                table[i][vol] = max(table[i-1][vol], table[i-1][vol-w[i]]+v[I])

    tb = pt.PrettyTable()
    for row in table:
        tb.add_row(row)
    print(tb)
结果

相关文章

  • 7.01背包问题

    问题描述 有4个物品,体积:2,3,4,5 。价值:3,4,5,6。背包容量:8。使用该背包装这些物品所能得到的最...

  • 背包问题(完全背包)

    动态规划合集: 1.矩阵链乘法2.投资组合问题3.完全背包问题4.01背包问题5.最长公共子序列 例题3——背包问...

  • 7.01

    一日店长还挺好玩的,我们小伙伴都很自觉,因为只有一日,也都是复制粘贴式工作,工作时间管理会更有计划。 明天目标20...

  • Algorithm进阶计划 -- 动态规划(下)

    经典动态规划背包问题最长子序列问题 1. 背包问题 1.1 0-1 背包问题 0-1 背包问题,描述如下: 上面...

  • 背包问题

    0-1背包问题 问题 n个物体,它们各自有重量和价值,给定一个有容量的背包,如何让背包里装入的物体价值总和最大? ...

  • 背包问题

    问题描述 假如有一个能装下4磅的背包,如何从下列商品列表中选择商品填充背包,使价值达到最大: 动态规划 要解决背包...

  • 背包问题

    (1)0-1背包容量为10的背包,有5种物品,每种物品只有一个,其重量分别为5,4,3,2,1,其价值分别为1,2...

  • 背包问题

  • 背包问题

    01背包(物品只有一个) 有N件物品和一个容量为V的背包。第i建物品的费用是w[i],价值是v[i]。求解将哪些物...

  • 背包问题

    1. 01背包 状态说明:背包体积为v,物品个数为n,f[n,v]表示前n件物品加入背包的最大价值。c_i,w_i...

网友评论

      本文标题:7.01背包问题

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