python實踐:貪心算法-小偷來到王宮

# 小偷來到了一個神祕的王宮,突然眼前一亮,發現5個寶貝,每個寶貝的價值都不一樣,且重量也不一樣,但是小偷的揹包攜帶重量有限,所以他不得不在寶貝中做出選擇,才能使偷到的財富最大,請你幫助小偷計算一下。
#
# 輸入描述:
#
# 寶貝價值:6,3,5,4,6
#
# 寶貝重量:2,2,6,5,4
#
# 小偷揹包容量:10
#
# 輸出描述:
#
# 偷到寶貝的總價值:15
def MaxMoney(file_name,cap):
    # print(file_name)
    # with open(file_name,'r') as file:
    list1=file.readlines()
    treasure_name=[]
    treasure_money=[]
    treasure_weight=[]
    dict_treasure_average={}
    dict_treasure_money={}
    dict_treasure_weight={}
    for i in range(0,len(list1)):
        # print(list1[i].split('|')[1])
        treasure_name.append(list1[i].split('|')[1].strip())
        treasure_money.append(list1[i].split('|')[2].strip())
        treasure_weight.append(list1[i].split('|')[3].strip())
        dict_treasure_money[treasure_name[i]]=treasure_money[i]
        dict_treasure_weight[treasure_name[i]]=treasure_weight[i]
        dict_treasure_average[treasure_name[i]]=int(treasure_money[i])/int(treasure_weight[i])
    dict_treasure_average=sorted(dict_treasure_average.items(),key=lambda x:x[1],reverse=True)
    print(dict_treasure_average)
    money = 0
    treasure_take=[]
    # print(len(dict_treasure_average))
    for i in range(0,len(dict_treasure_average)):
        # print(dict_treasure_weight[dict_treasure_average[i][0]])
        if cap >= int(dict_treasure_weight[dict_treasure_average[i][0]]):
            money += int(dict_treasure_money[dict_treasure_average[i][0]])
            treasure_take.append(dict_treasure_average[i][0])
            cap -= int(dict_treasure_weight[dict_treasure_average[i][0]])
            print('cap %d' % cap)
    print(money,treasure_take)

if __name__=='__main__':
    file_name='E:\python_test\exercise0401\\treasure.txt'
    with open(file_name,'r') as file:
        MaxMoney(file,13)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章