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

    def bag(n,c,w,v):
        res=[[-1 for j in range(c+1)]
             for i in range(n+1)]
        for j in range(c+1):
            res[0][j]=0
        for i in range(1,n+1):
                for j in range(1,c+1):
                    res[i][j]=res[i-1][j]
                    if j>=w[i-1] and res[i][j]<res[i-1][j-w[i-1]]+v[i-1]:
                        res[i][j]=res[i-1][j-w[i-1]]+v[i-1]
        return res
    def show(n,c,w,res):
        print('最大价值为:', res[n][c])
        x = [False for i in range(n)]
        j = c
        for i in range(1, n + 1):
            if res[i][j] > res[i - 1][j]:
                x[i - 1] = True
                j -= w[i - 1]
        print('选择的物品为:')
        for i in range(n):
            if x[i]:
                print('', i, '个,', end='')
        print('')
    if __name__ == '__main__':
        # n = int(input("物品的数量:"))
        c = int(input("书包的承受量:"))
        w = [2, 2, 6, 5, 4]  #每个物品的重量
        v = [6, 3, 5, 4, 6]  #每个物品的价值
        n = len(w)           #物品的数量
        res = bag(n, c, w, v)
        show(n, c, w, res)
  • 相关阅读:
    safeNet
    网店
    微信公众号自定义菜单与回车
    西游记对教育的启发
    zencart资源
    cmd批处理常用符号详解
    div垂直居中
    git工作量统计
    VS2012变化的快捷键:
    sql 树 递归
  • 原文地址:https://www.cnblogs.com/cn-gzb/p/9788214.html
Copyright © 2011-2022 走看看