根据自己的理解,用python写了背包问题的求解:
问题描述:给定一组物品,每种物品都有自己的重量和价格,在限定的重量内,如何选择才能使物品的总价最高?
1.使用动态规划的思想来解决背包问题
解决思路:动态规划,对每一件物品遍历背包容量,当背包可容纳值大于等于当前物品,与之前已放进去的物品所得价值进行对比,考虑是否需要置换。
代码如下:
#m为包载重量,n为物品数,w为物品的重量,v为物品的价值 def bag(m,n,w,v): #置零表示初始状态 value = [[0 for i in range(m+1)] for j in range(n+1)] for i in range(1,n+1): for j in range(1,m+1): value[i][j] = value[i-1][j] if j >= w[i-1] and value[i-1][j-w[i-1]] + v[i-1]: value[i][j] = value[i-1][j-w[i-1]] + v[i-1] return value def show(n, m, w, value): print('最大价值为:', value[n][m]) x = [False for i in range(n)] j = m for i in range(n, 0, -1): if value[i][j] > value[i - 1][j]: x[i - 1] = True j -= w[i - 1] print('背包中所装物品为:') for i in range(n): if x[i]: print('第', i+1, '个,', end='') if __name__ == '__main__': n = 6 #物品的数量, m = 5 #书包能承受的重量, w = [2, 2, 3, 1, 5, 2] #每个物品的重量, v = [2, 3, 1, 5, 4, 3] #每个物品的价值 value = bag(m,n,w,v) show(n,m,w,value)