当前位置: 首页 > 图灵资讯 > 行业资讯> python动态规划算法的使用过程

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

来源:图灵python
时间: 2024-07-25 20:21:01

使用过程

1、获取相应的信息

(货物数量,背包容积,每种货物的体积和价值)

2、最佳值矩阵的结构。

3、最佳值矩阵的初始化

(上方和左侧有一个空白矩阵作为后续操作,但没有结果)

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

5、反向推导矩阵可以得到某个产品,也可以不安装。

输出结果。

实例

print('请输入待装物品数量和背包体积(空格隔离):')
n,v=map(int,input().split()#获取物品数量和背包体积
goods=[]#初始化商品列表#
foriinrange(n):
print(f'请输入第{i+1}一个项目的重量和价值(空间隔离):')
goods.append(list(map(int,input().split()))#获取商品信息

#计算最优值矩阵
dp=[[[0forinrange](v+1)]forjinrange(n+1)#初始化最优值矩阵
foriinrange(1,n+1):
forjinrange(1,v+1):
dp[i][j]=dp[i-1][j]#默认不安装,即等同于上一项的最佳值
ifj>=goods[i-1][0]:
#如果背包有足够的剩余空间,如果背包有足够的空间
dp[i][j]=max(dp[i][j],dp[i-1][j-goods[i-1][0]]+
goods[i-1][1])#比较安装和不安装的价值,选择更大的价值

"""
#输出最佳值矩阵
foriindp:
print(i)
"""

#计算最优解
x=[0forinrange(n+1)#初始化物品状态,0:不装,1:装
foriinrange(n,0,-1):
ifdp[i][v]==dp[i-1][v]:#判断最优值是否发生变化,如果没有变化,则表示没有安装
x[i]=0#不装
else:#假如有变化,说明装了,并减去相应的重量
x[i]=1#装
v-=goods[i-1][0]#减去相应重量
x[n]=1ifdp[n][v]!=0else0#判断最后一件物品是否安装

#输出最优解
print('背包应装物品为')
foriinrange(1,n+1):
print(f'编号:{str(i)}\t重量:{goods[i-1][0]}\t价值:{goods[i-1][1]}\n'ifx[i]==1else'',end='')
#输出最优值
print('物品价值:',dp[-1][-1])

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

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