華為OJ 購物單

2021-07-13 05:33:52 字數 1662 閱讀 5194

購物單

王強今天很開心,公司發給n

元的年終獎。王強決定把年終獎用於購物,他把想買的物品分為兩類:主件與附件,附件是從屬於某個主件的,下表就是一些主件與附件的例子:

主件附件

電腦印表機,掃瞄器

書櫃圖書

書桌檯燈,文具

工作椅無

如果要買歸類為附件的物品,必須先買該附件所屬的主件。每個主件可以有0 

個、1 

個或2 

個附件。附件不再有從屬於自己的附件。王強想買的東西很多,為了不超出預算,他把每件物品規定了乙個重要度,分為

5 等:用整數

1~5 表示,第

5 等最重要。他還從網際網路上查到了每件物品的**(都是

10 元的整數倍)。他希望在不超過

n 元(可以等於

n 元)的前提下,使每件物品的**與重要度的乘積的總和最大。

設第j 

件物品的**為

v[j] 

,重要度為

w[j] 

,共選中了

k 件物品,編號依次為

j 1 

,j 2 ,……

,j k 

,則所求的總和為:

v[j 1 ]*w[j 1 ]+v[j 2 ]*w[j 2 ]+ … +v[j k ]*w[j k ] 。(其中

* 為乘號)

請你幫助王強設計乙個滿足要求的購物單。

輸入描述:

輸入的第1 

行,為兩個正整數,用乙個空格隔開:

n m(其中n 

(<32000 

)表示總錢數,m (

<60 

)為希望購買物品的個數。)

從第2 

行到第m+1 

行,第j 

行給出了編號為

j-1 

的物品的基本資料,每行有

3 個非負整數

v p q

(其中v 

表示該物品的**(

v<10000 

),p 

表示該物品的重要度(

1~5 ),

q 表示該物品是主件還是附件。如果

q=0 

,表示該物品為主件,如果

q>0 

,表示該物品為附件,

q 是所屬主件的編號)

輸出描述:

輸出檔案只有乙個正整數,為不超過總錢數的物品的**與重要度乘積的總和的最大值(

<200000 

)。輸入例子:

1000 5

800 2 0

400 5 1

300 5 1

400 3 0

500 2 0

輸出例子:

2200

#include using namespace std;

typedef struct

list;

int main()

//動態規劃:構造一張表

for(int j=1; j<=money; j++)

//該商品為附件

if(goods[i].judge)}}

cout<

華為機試 購物單

輸入例子 1000 5 800 2 0 400 5 1 300 5 1 400 3 0 500 2 0 輸出例子 2200 解題思路 這是一道揹包問題。先考慮解決揹包問題,思路是這樣 比如說這道題目,給定總錢數n,共有m件商品可以購買,從這m件商品中選擇購買商品,使得購買商品的錢數不超過n,同時滿足...

華為機試 購物單

王強今天很開心,公司發給n元的年終獎。王強決定把年終獎用於購物,他把想買的物品分為兩類 主件與附件,附件是從屬於某個主件的,下表就是一些主件與附件的例子 主件附件 電腦印表機,掃瞄器 書櫃圖書 書桌檯燈,文具 工作椅無 如果要買歸類為附件的物品,必須先買該附件所屬的主件。每個主件可以有 0 個 1 ...

購物單 華為機試 C C

別人分享的 下面例子測試不過去 30 4 10 5 4 10 5 4 10 5 0 10 1 0 應該輸出 150王強今天很開心,公司發給n元的年終獎。王強決定把年終獎用於購物,他把想買的物品分為兩類 主件與附件,附件是從屬於某個主件的,下表就是一些主件與附件的例子 主件附件 電腦印表機,掃瞄器 書...