温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python动态规划算法怎么用

发布时间:2021-04-28 10:49:42 来源:亿速云 阅读:203 作者:小新 栏目:编程语言

小编给大家分享一下python动态规划算法怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

python有哪些常用库

python常用的库:1.requesuts;2.scrapy;3.pillow;4.twisted;5.numpy;6.matplotlib;7.pygama;8.ipyhton等。

1、使用过程

获取相应信息(商品数量、背包容积、各商品体积和价值)

结构的最佳值矩阵。

初始化的最佳值矩阵(上方和左侧留有空白矩阵作为后续运算,但没有结果)

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

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

输出结果。

2、实例

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动态规划算法怎么用”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI