首页 > 编程知识 正文

背包问题 动态规划,01背包问题动态规划代码

时间:2023-05-05 05:13:25 阅读:34815 作者:4513

实验原理是通过设定动态的临时数组,存储子问题的求解值,每次调用子问题的解,最终构成原问题的解

实验步骤1、将问题分解为几个子问题。 例如,背包只能容纳一个物品,能容纳的质量是一个等等。

2、依次求解各子问题的最优解。

3、各子问题的最优解又可从其子问题的最优解中得到。

4、从各部分问题的最优解中得到原问题的最优解。

键码#动态规划,遍历每个项目的背包容量,如果背包的可接受值大于或等于当前项目,则与#以前放入的项目获得的价值进行比较,importtimedefbag(n,c, 考虑是否需要替换w的v ) :value=[0forjinrange(C1 ) ] for i in range(1(n 1 ) ]forIinrange,N1 ) : for j in range(1 c 1) : value [ I ] [ j ]=value [ I-1 ] [ j ] #背包的总容量足以容纳当前物体,遍历前面的状态,ifj=w [ I-1 ] and value [ I ] [=考虑是否替换=value的forxinvalue:#print(x ) return value,从代码中可以看出,时间复杂度是n^2完整代码(动态规划的,针对每个项目背包如果背包的可接受值大于或等于当前项目),则importtimedefbag(n,c,w,v ) : value=[ 0财富(C1 ) ]财富n1 ) )考虑是否需要替换3366 )的c 1) : value [ I ] [ j ]=value [ I-1 ] [ j ] #背包的总容量足以容纳当前物体,遍历前面的状态,并] v [ I-1 ] : value [ I ] [ j ]=考虑是否替换value的forxinvalue:#print(x ) returnvaluedefbag1(n,c,w,v ) 330 n 1 0,-1) : # )背包的总容量足以容纳当前物体,遍历前面的状态,使ifj=w [ I-1 ] : values [ j ]=max (values [ j-w [ I-1 ] 考虑是否替换values ) value ) :打印(最大值为: ),value[n][c] ) x=[False for i in range(n ) n]j=cforIinrange -1) 3360 if value [ I ] [ j ] value [ I-1 ] [ j ] : x [ I-1 ]=truej-=w [ I-1 ] print (背包中的物体为: ' ) ff inpu=open(input.txt ',' r ' ) oupu 'w ' ) #n=int(inpu.readline () #n=int(inpu.readline ) ) ) # str _ str_in=input ('请输入各元素的重量(n ) ) w=[int(n ) n ) for n in str _ in.split ] # str _ in=inpu.readline ) ) start1=time.clock ) ) value=bag(n,c,w,v ) #value=bag1(n c,w,value(#oupu.write(str ) () end1- starue

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。