动态规划:
01背包:
关键在于理解j-w(i),这里边的j代表的含义!!!!!!!!!!是背包最大可装j,所以首先要比较的就是w(i)是否大于j,如果第i个物品重量直接大于背包可以承受的质量,那就没必要装了,因为装不下!!!然后如果不大于的话,最优解当然是比较装与不装那个更好了,不装的结果已经知道了,装的结果如何最大呢?当然是背包可以装的最大质量j腾出物品i的质量,然后这些剩下的空间最大能装多找已经知道结果了,所以j最大能装多少也就知道了,这里理解了,第一个难点也就理解了,所有的难点也就理解了!!!!!!
for i in range(1, num + 1):
for j in range(1, capacity + 1):
for k in range((j // weightList[i - 1]) + 1):
if valueExcel[i][j] < (valueExcel[i - 1][j - k*weightList[i - 1]] + k*valueList[i - 1]):
valueExcel[i][j] = (valueExcel[i - 1][j - k * weightList[i - 1]] + k*valueList[i - 1])
01背包,多重背包、完全背包的终极公示,k代表每一个物品的数量,想方设法弄出来就好了,顺序逐一对照