亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

完全背包問題-含優化

2019-11-06 06:06:27
字體:
來源:轉載
供稿:網友
**題目**有N件物品和一個容量為V的背包,每件物品可無限次使用。第i件物品的所需容量是c[i],價值是w[i]。求解將哪些物品裝入背包可使價值總和最大。

由于物品可以無限次使用,商品i以及商品j,如果c[i]<=c[j] and w[i]>=w[j],那么如果要達到最大價值,無論如何都不必裝入物品j。商品優化代碼如下:

#coding=utf-8class Solution(): def full_package(self,goods,max_V): self.goods_remove(goods) PRint goods def goods_remove(self,goods): # 操作簡化,將所有的不符合條件的good刪除 good_delete = set([]) #方便查找,商品不必重復刪除 for i in range(len(goods)): #如果商品已經在刪除列表,那么沒必要再考慮比這個商品j還差勁的商品k,因為商品列表中一定存在i優于j,才導致j出現在刪除列表,商品k如果差于商品j,那么商品k一定差于商品i,即i優于k,k肯定也在刪除列表。。。 if i in good_delete:continue for j in range(len(goods)): if goods[i][0] <= goods[j][0] and goods[i][1] >= goods[j][1]: if j == i: continue good_delete.add(j) elif goods[i][0] >= goods[j][0] and goods[i][1] <= goods[j][1]: if j == i: continue good_delete.add(i) else:continue good_delete = list(good_delete) good_delete.sort(reverse=True) for i in good_delete: del goods[i]

完全背包問題有2種解法 解法1:采用01背包問題的相關思路,將所有物品的c[i]*2^k<=V,加入到goods中,因為c[i]*2^k組合可以滿足調用物品i的任意一種情況,相當于數字2進制表示。然后后續采用01背包問題完全一致的解法即可,解法1代碼如下:

#coding=utf-8class Solution(): def full_package(self,goods,max_V): self.goods_remove(goods) goods_add = [] for i in goods: k = 1 while i[0]*(2**k)<=max_V: goods_add.append([i[0]*(2**k),i[1]*(2**k)]) k+=1 goods.extend(goods_add) f = [0] * (max_V + 1) for i in range(len(goods)): for v in xrange(max_V,goods[i][0]-1,-1): #特別注意這個if語句,如果不寫,結果可能會出現錯誤?。?! if v>=goods[i][0]: f[v] = max(f[v],f[v-goods[i][0]]+goods[i][1]) print f return f[max_V] def goods_remove(self,goods): # 操作簡化,將所有的不符合條件的good刪除 good_delete = set([]) for i in range(len(goods)): if i in good_delete: continue for j in range(len(goods)): if goods[i][0] <= goods[j][0] and goods[i][1] >= goods[j][1]: if j == i: continue good_delete.add(j) elif goods[i][0] >= goods[j][0] and goods[i][1] <= goods[j][1]: if j == i: continue good_delete.add(i) else:continue good_delete = list(good_delete) good_delete.sort(reverse=True) for i in good_delete: del goods[i]goods = [[5,12],[4,3],[7,10],[2,3],[6,6]]test = Solution()print test.full_package(goods,16)

結果如下所示: [0, 0, 3, 3, 6, 12, 12, 15, 15, 18, 24, 24, 27, 27, 30, 36, 36] 36


解法2:由于每個物品可以使用無限次,求解01背包問題時,value需要逆序計算,正式為了保證每件物品只可以選擇1次,無法無限次選用。正是由于物品可以使用無限次,完全背包問題其實只要對value順序進行計算,求出結果即可。代碼如下:

#coding=utf-8class Solution(): def full_package(self,goods,max_V): self.goods_remove(goods) f = [0] * (max_V + 1) for i in range(len(goods)): for v in range(max_V+1): #特別注意這個if語句,如果不寫,結果可能會出現錯誤?。?! if v>=goods[i][0]: f[v] = max(f[v],f[v-goods[i][0]]+goods[i][1]) print f return f[max_V] def goods_remove(self,goods): # 操作簡化,將所有的不符合條件的good刪除 good_delete = set([]) for i in range(len(goods)): if i in good_delete: continue for j in range(len(goods)): if goods[i][0] <= goods[j][0] and goods[i][1] >= goods[j][1]: if j == i: continue good_delete.add(j) elif goods[i][0] >= goods[j][0] and goods[i][1] <= goods[j][1]: if j == i: continue good_delete.add(i) else: continue good_delete = list(good_delete) good_delete.sort(reverse=True) for i in good_delete: del goods[i]goods = [[5,12],[4,3],[7,10],[2,3],[6,6]]test = Solution()print test.full_package(goods,16)

結果如下所示: [0, 0, 3, 3, 6, 12, 12, 15, 15, 18, 24, 24, 27, 27, 30, 36, 36] 36


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97av在线视频| 国产精品成人免费视频| 美女福利视频一区| 日韩有码片在线观看| 国产成人精品一区二区在线| 懂色av中文一区二区三区天美| 亚洲欧美另类自拍| 一夜七次郎国产精品亚洲| 久久久亚洲影院| 欧美一级视频免费在线观看| 成人国产在线激情| 国语自产精品视频在线看抢先版图片| 精品亚洲一区二区三区在线观看| 日韩av在线一区| 国产欧美婷婷中文| 色综合久久悠悠| 欧美性猛交xxxx免费看漫画| 成人免费观看网址| 国产精品v日韩精品| 欧美日韩亚洲精品内裤| 日韩欧美在线视频| 久久视频在线观看免费| www高清在线视频日韩欧美| 亚洲国产99精品国自产| 亚洲国产福利在线| 欧美激情videos| 狠狠色狠色综合曰曰| 欧美成人免费va影院高清| 亚洲欧美在线免费| 日本一本a高清免费不卡| 亚洲性av网站| 日韩欧美成人精品| 欧美另类69精品久久久久9999| 国产成人精品av| 欧美精品在线看| 欧美激情乱人伦一区| 欧美有码在线观看视频| 亚洲jizzjizz日本少妇| 色婷婷av一区二区三区在线观看| 国产精品va在线播放我和闺蜜| 日韩成人xxxx| 久久久精品一区二区| 日韩va亚洲va欧洲va国产| 国产精自产拍久久久久久| 欧美黄色性视频| 日韩精品极品视频免费观看| 色偷偷av亚洲男人的天堂| 色悠久久久久综合先锋影音下载| 欧美最猛黑人xxxx黑人猛叫黄| 精品一区二区三区电影| 久久91亚洲精品中文字幕| 97**国产露脸精品国产| 91久久精品久久国产性色也91| 在线观看亚洲区| 欧美日韩中国免费专区在线看| 国产一区二区在线播放| 亚洲欧美日韩一区二区在线| 国产精品第二页| 欧美黑人国产人伦爽爽爽| 成人观看高清在线观看免费| 欧美成人久久久| 国产欧美婷婷中文| 午夜精品一区二区三区在线视频| 色av吧综合网| 九九九久久久久久| 在线观看精品自拍私拍| 北条麻妃在线一区二区| 中文字幕亚洲情99在线| 亚洲成人av资源网| 国产一区二区动漫| zzijzzij亚洲日本成熟少妇| 日韩av在线资源| 国产美女精品免费电影| 久久久久国产精品免费| 亚洲成人激情小说| 一区二区三区日韩在线| 欧美成人午夜影院| 国内精品一区二区三区| 色哟哟网站入口亚洲精品| 国产欧美一区二区三区在线看| 91丝袜美腿美女视频网站| 亚洲www在线观看| 欧美电影在线观看高清| 国产一区二区三区在线免费观看| 久久久精品久久| 亚洲精品福利免费在线观看| 69影院欧美专区视频| 亚洲人线精品午夜| 热99在线视频| 亚洲天天在线日亚洲洲精| 日韩精品丝袜在线| 久久久久久亚洲精品不卡| 日韩美女视频中文字幕| 丝袜美腿亚洲一区二区| 国产欧美精品一区二区三区-老狼| 国产日韩欧美综合| 亚洲国产成人精品电影| 亚洲欧美在线第一页| 国产精品99久久久久久白浆小说| 中文字幕av日韩| 国产精自产拍久久久久久| 国产精品亚发布| 97色在线视频| 欧美亚洲激情视频| 久久综合九色九九| 在线电影中文日韩| 欧美精品久久久久久久久久| 国产日韩专区在线| 亚洲福利影片在线| 中文字幕日韩高清| 亚洲免费电影一区| 国产精品一区二区三区久久| 日韩成人激情视频| 亚洲色图欧美制服丝袜另类第一页| 国产mv免费观看入口亚洲| 日韩av中文字幕在线播放| 这里只有精品视频| 亚洲精品美女在线观看| 亚洲小视频在线| 亚洲影院色在线观看免费| 国产精品观看在线亚洲人成网| 久久精品久久精品亚洲人| 91高清视频在线免费观看| 欧美性猛交xxxx久久久| 国产丝袜高跟一区| 亚洲国产精品久久| 精品国产拍在线观看| 欧美日韩亚洲网| 国产精品入口日韩视频大尺度| 97香蕉超级碰碰久久免费软件| 欧美午夜无遮挡| 国产综合视频在线观看| 久久精品国产2020观看福利| 欧美专区在线观看| 欧美视频在线观看免费| 欧美视频免费在线| 97av在线视频免费播放| 日韩欧美在线免费观看| 这里只有精品久久| 国产一区二区三区高清在线观看| 欧美精品激情在线观看| 久久久久久久久电影| 亚洲精品美女久久| 成人综合国产精品| 久久久久久国产精品美女| 一区二区亚洲欧洲国产日韩| 秋霞成人午夜鲁丝一区二区三区| 欧美一级高清免费播放| 亚洲午夜未满十八勿入免费观看全集| 91在线观看欧美日韩| 国产精品免费久久久久久| 亚洲精品丝袜日韩| 久久久影视精品| 欧美成人在线网站| 亚洲午夜精品久久久久久久久久久久| 亚洲人成毛片在线播放| 久久久久久这里只有精品| 国产精品久久久久久久电影| 成人激情综合网| 亚洲福利小视频| 日韩成人av在线播放| 26uuu另类亚洲欧美日本一| 美女撒尿一区二区三区| 亚洲欧美国产另类|