20200903紀念品筆試題

2021-10-24 09:03:35 字數 1758 閱讀 5084

題目描述:

李華順利到達了巴黎,李華遇到了許多心動的紀念品想帶回家,但是他又不想自己太累,而且他買紀念品也有相應的預算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 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據 進行分組,但...

紀念品分組

題目描述 元旦快到了,校學生會讓樂樂負責新年晚會的紀念品發放工作。為使得參加晚會的同學所獲得 的紀念品價值相對均衡,他要把購來的紀念品根據 進行分組,但每組最多只能包括兩件紀念品,並且每組紀念品的 之和不能超過乙個給定的整數。為了保證在盡量短的時間內發完所有紀念品,樂樂希望分組的數目最少。你的任務是...