• 技术文章 >Python技术 >Python基础教程

    python动态规划算法的使用过程

    小妮浅浅小妮浅浅2021-08-09 10:55:35原创1934

    使用过程

    1、获取相应信息

    (商品数量、背包容积、各商品体积和价值)

    2、结构的最佳值矩阵。

    3、初始化的最佳值矩阵

    (上方和左侧留有空白矩阵作为后续运算,但没有结果)

    4、根据商品之间的最佳价值公式计算出相应的结果。

    5、逆向推导矩阵得到某个商品,或者没有安装。

    输出结果。

    实例

    print('请输入待装物品数量和背包体积(空格隔开):')
    n, v = map(int, input().split())  # 获取物品数量和背包体积
    goods = []  # 初始化商品列表
    for i in range(n):
        print(f'请输入第{i + 1}个物品的重量和价值(空格隔开):')
        goods.append(list(map(int, input().split())))  # 获取商品信息
     
    # 计算最优值矩阵
    dp = [[0 for i in range(v + 1)] for j in range(n + 1)]  # 初始化最优值矩阵
    for i in range(1, n + 1):
        for j in range(1, v + 1):
            dp[i][j] = dp[i - 1][j]  # 默认不装,即和上一项最优值相等
            if j >= goods[i - 1][0]:
                # 如果背包剩余空间充足
                dp[i][j] = max(dp[i][j], dp[i - 1][j - goods[i - 1][0]] +
                               goods[i - 1][1])  # 对比装与不装的价值并选择较大值
     
    """
    # 输出最优值矩阵
    for i in dp:
        print(i)
    """
     
    # 计算最优解
    x = [0 for i in range(n + 1)]  # 初始化物品状态,0:不装,1:装
    for i in range(n, 0, -1):
        if dp[i][v] == dp[i - 1][v]:  # 判断最优值是否发生变化,如果没有变化,则说明没有装
            x[i] = 0  # 不装
        else:  # 如果有变化,则说明装了,并减去对应重量
            x[i] = 1  # 装
            v -= goods[i - 1][0]  # 减去对应重量
        x[n] = 1 if dp[n][v] != 0 else 0  # 判断最后一个物品装不装
     
    # 输出最优解
    print('背包应装物品为:')
    for i in range(1, n + 1):
        print(f'编号:{str(i)}\t重量:{goods[i - 1][0]}\t价值:{goods[i - 1][1]}\n' if x[i] == 1 else '', end='')
    # 输出最优值
    print('物品价值:', dp[-1][-1])

    以上就是python动态规划算法的使用过程,希望对大家有所帮助。更多Python学习指路:python基础教程

    本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。

    专题推荐:python动态规划算法
    品易云
    上一篇:Python unittest有哪些使用方法 下一篇:python线程安全的介绍及解决方法

    相关文章推荐

    • python二项分布的概率使用• python正态分布中的normal函数• python tqdm有哪些用法• python自定义进度条显示信息• python线程阻塞的解决• python socketserver处理客户端的流程• python socket连接客户端的方法• python TCP和UDP协议的区别分析• python如何实现事务机制• Python bs4的四种对象• Python中__slots__限制属性• Python测试前置操作的方法• Python unittest有哪些使用方法

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网