我想在python中实现以下数学公式:
最优[i] [s] = max {最优[i + 1] [s],最优[i + 1] [s-J [i]] + V [i-1] (s> J [i])}
我尝试了以下操作:
W={1:3,2:2,3:1,4:4,5:5,6:9,7:6,8:7}
V=[25,20,15,40,50,55,45,58]
optimal=[[]]
J=list(W.values())
s=12
for i in range(1,len(W)):
while J[i]<s:
optimal[i][s]=max(optimal[i+1][s],optimal[i+1][s-J[i]]+V[i-1])
print(optimal)
但是我收到一条错误消息:
列表索引超出范围。
答案 0 :(得分:0)
您的表述类似于动态编程。如果您使用动态编程和python关键字进行搜索,则可以找到很好的示例。特别是https://www.geeksforgeeks.org/0-1-knapsack-problem-dp-10/ 和https://codereview.stackexchange.com/questions/20569/dynamic-programming-knapsack-solutionhttps://www.geeksforgeeks.org/0-1-knapsack-problem-dp-10/