问题描述
具体内容来自于《算法分析与设计——C++语言描述》(第三版 陈慧南编著)。网上大多数只能搜到整型数据的背包问题,其转移方程中有需要根据索引【j-w[i]】来读取数组数据进行计算的,而如果重量数组w是浮点型,就没法使用那种转移方程了。
所以看了这本书的动态规划内容,其使用阶跃点来求解问题。我也根据书中给的算法使用python实现了一下,但是存有问题,希望能有人可以帮助我一下。
代码部分
1 常见的那种支持整型数据的
'''
说明:代码直接从我的文件中copy出来的
具体求解的问题,可以看做是一般分配问题
符号说明:
N:物品数量
M:背包数量
bin_size: 存储多个背包尺寸的数组
j: 当前遍历的次数,对应求解第几个背包的放置问题
item_size: 物品尺寸的数组,是N*M的,每一列是一个背包中物品的尺寸,尺寸对每个背包可以是不同的
P: 效益矩阵,每一列对应每个背包中物品的收益情况
'''
def lp_01knapsack(self, j):
# 第j列,对应第j个背包的情况
depth = j
n, c = int(self.N), int(self.bin_size[depth])
dp = [[0 for jindex in range(c + 1)] for index in range(n + 1)]
for k in range(c + 1):
dp[0][k] = 0
# depth = j
# 价值函数,需要提取profit矩阵的第j列 错了 是Pj
value_