題目描述:
李華順利到達了巴黎,李華遇到了許多心動的紀念品想帶回家,但是他又不想自己太累,而且他買紀念品也有相應的預算k,
現給出他心動的紀念品清單:總共n件,其中每件都各有其**price,重量weight,心動值v(1-5),需要注意在心動值不同的情況下,
李華優先選心動值大的紀念品,若心動值相同,李華會優先選擇比較便宜的紀念品,具體見樣例。同時給出李華在保證不累的情況下,
最多能拿的物品重量m,在不超過預算並且保證不累的情況下,李華最多可以帶幾件紀念品回家?
輸入描述:
第一行三個正整數,分別為:紀念品件數n,最多能拿物品重量m,預算k。
第二行到n+1行,分別為物品**price,重量weight,心動值v:
輸出描述
在不超過預算並且保證不累的情況下,李華最多可以帶回家的紀念品 件數
樣例輸入(為了方便看,已經按照後前中排好序)
4 11 1000
600 5 3
100 2 2
300 5 2
50 1 1
樣例輸出
3
由於李華會有限選擇心動值大的物品,所以李華選擇了第一件和第三件物品
方法一是對二維陣列的心動值和**進行排序,之後從上往下依次累加進揹包就可以
方法二是對二維陣列的心動值進行排序,之後拿心動值高的,然後心動值一樣就拿**低的
解題思路:注意注意注意!此題區別於揹包問題。這個題是選心動值優先,若心動值相同,優先選擇比較便宜的紀念品,若**相同,優先選擇輕的。(心動值優先,答案為2,裝兩個心動值600 5 3,100 2 2的物品,第三個物品因為重量是5裝不下了,所以只能裝前兩個,則心動值之和為3+2=5)解題方法為將物品按照將心動值由大到小逆序排序,再將**由小到大正序排序,最後將**由小到大排序(索引為後前中)。在滿足錢夠和揹包能裝下的前提下買心動值大的物品
而揹包問題是找到最優解讓心動值的和最大,而不是心動值優先。如果按照此題,應該裝600 5 3,100 2 2和50 1 1答案應該為3,心動值優先不會繞過大的心動值去選小的心動值。
import sys
import numpy as np
a = sys.stdin.readline().strip().split()
list1 =
for i in range(int(a[0])):
tem =
val = sys.stdin.readline().strip().split()
# for迴圈將值存入陣列,注意此處存入必須為int型,要不然np.lexsort不能處理字串
for j in val:
list2 = np.array(list1) # 轉化為array物件
data_list2 = list2[index1]
money = 0
weight = 0
number = 0
for n in data_list2:
if (money + n[0]) <= int(a[2]) and weight + n[1] <= int(a[1]): # 滿足兩者才能獲得
money += n[0]
weight += n[1]
number += 1
else:
print(number) # 此題答案
print(number) # 程式走完的答案
紀念品分組
問題描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得的紀念品價值 相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整數。為了保證在盡量短的時 間內發完所有紀念品,樂樂希望分組的數目最少。你的任務...
紀念品分組
time limit 1 sec memory limit 128 mb submit 4 solved 2 submit status web board 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據 進行分組,但...
紀念品分組
題目描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整數。為了保證在盡量短的時間內發完所有紀念品,樂樂希望分組的數目最少。你的任務是...