01背包问题python 2.7实现

版权声明:本文为博主原创文章,转载请注明转自 http://www.cnblogs.com/kdxb/p/6140625.html

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 class bag():
 4     def __init__(self,weight,value):
 5         self.weight = weight
 6         self.value = value
 7     def knapsack(self, full_weight):#weight value存数组
 8         result = [[0 for i in range(full_weight+1)] for i in range(len(self.value)+1)]
 9         count = len(self.weight)#物品个数
10         for n in range(1,count+1):#n当前最大物品个数
11             for weight in range(0,full_weight+1):#背包内重量递增
12                 if self.weight[n-1]<=weight:#第n个背包的重量为weight[n-1]判断是否小于允许容量
13                     if result[n-1][weight]<(result[n-1][weight-self.weight[n-1]]+self.value[n-1]):
14                         #如果当前物品在相同重量情况下价值更高
15                         result[n][weight]=result[n-1][weight-self.weight[n-1]]+self.value[n-1]
16                     else:
17                         result[n][weight]=result[n-1][weight]
18                 else:
19                     result[n][weight] =result[n-1][weight]
20         for perrow in result:
21             print perrow
22         return result
23     def find_which(self,full_weight):
24         result = self.knapsack(full_weight)
25         i= len(result)-1
26         j = len(result[i])-1
27         while i >=1:
28             while j>=1:
29                 if result[i-1][j]!=result[i][j]:#说明当前行的东西拿了
30                     print ''+ str(i)+''
31                     j = j -self.weight[i-1]
32                     i = i - 1
33                     break
34                 else:
35                     i = i -1
36 
37 
38 def main():
39     sort_instance = bag([2,2,6,5,4,1,2,7,5,7,4],[6,3,5,4,6,1,4,7,3,6,1])#重量,价值初始化
40     sort_instance.find_which(30)#定义背包总重量
41 
42 if __name__ =='__main__':
43     main()

实现结果:

 

posted @ 2016-12-07 12:00  科大小白  阅读(3518)  评论(0编辑  收藏  举报