声明:
0.代码由本人自行完成 未进行稳定性测试
1.01背包问题是背包问题中较为简单的一类 涉及两个状态
2.代码采用递归 Dynamic Programming 共三种方法实现
3.滚动数组实现降纬 骤减空间复杂度
4.转载附原作者Id及作品链接
代码如下:
def most_value_1(c,w):
#递归
if c>0 and w-weights[c-1]>=0:
#入口
case_1=most_value_1(c-1,w)
#不选
case_2=most_value_1(c-1,w-weights[c-1])+values[c-1]
#选
most=max(case_1,case_2)
#比较
return most
else:
return 0
def most_value_2(c,w):
#记忆数组
memory=[[0 for _ in range(w+1)] for _ in range(c)]
#初始化
for i in range(c):
#剩余选择
for j in range(w+1):
#剩余容量
if i>0:
memory[i][j]=memory[i-1][j]
if j>=weights[i]:
memory[i][j]=max(memory[i-1][j],memory[i-1][j-weights[i]]+values[i])
else:
memory[i][j]=0
if j>=weights[i]:
memory[i][j]=values[0]
return memory[-1][-1]
def most_value_3(c,w):
#滚动数组
memory=[0 for _ in range(w+1)]
for i in range(c):
for j in range(w+1):
if w-j>=weights[i]:
memory[w-j]=max(memory[w-j],memory[w-j-weights[i]]+values[i])
#倒序填表
return memory[-1]
if __name__ == "__main__":
summary_count=6
#总数
summary_weight=12
#容量
weights=[4,6,2,2,5,1]
#重量集
values=[8,10,6,3,7,2]
#价值集
value_1=most_value_1(summary_count,summary_weight)
print(value_1)
value_2=most_value_2(summary_count,summary_weight)
print(value_2)
value_3=most_value_3(summary_count,summary_weight)
print(value_3)
代码至此结束
此栏目预测共享自学之乐,共勉求知之友,共塑网站和谐好学的形象。
欢迎大家在评论区发表合理的意见和指正。
如果觉得该栏目对您有帮助,望不吝点赞收藏。