我有這樣的問題:「給定n項與權重變化從1千克10公斤,你怎麼袋的最低金額之間分配他們,知道每一不得持有超過10公斤」。你如何證明這個算法是最優的?
我試着通過排序,從最的項目,以最少的沉重,將它們放入一個袋子它們是否適合,並創建一個新的包,如果他們不解決它。如果是這種情況,那麼從剩下的物品中最重的物品重新開始。這裏是我的代碼:
list_of_items=raw_input("Input the items' weights (separated by spaces): ").split()
for i in range(len(list_of_items)):
list_of_items[i]=int(list_of_items[i])
list_of_items.sort()
list_of_items.reverse()
while list_of_items[0]>=10:
list_of_items=raw_input("You have input an item wheighing over 10kg: ").split()
for i in range(len(list_of_items)):
list_of_items[i]=int(list_of_items[i])
list_of_items.sort()
list_of_items.reverse()
set_of_bags=[] #In this list we'll store the bags
while(len(list_of_items)!=0):
weight=0
bag=[] #creates a new bag
for item in list_of_items: #cycle copies items to bag
if item+weight<=10:
bag.append(item)
weight+=item
set_of_bags.append(bag) #adds bag to set_of_bags
for item in bag: #deletes the items that have been put in set_of_bags from original list
list_of_items.remove(item)
# output
n=0
for bag in set_of_bags:
n+=1
weight=0
for j in bag:
weight += j
print "bag #"+str(n), bag, "=>", weight, "kg."
我相信這給出了正確的答案,但我不知道如何證明它。任何幫助?
聽起來像一個裝箱問題:http://en.wikipedia.org/wiki/Bin_packing_problem –