使用过程
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电脑。