洛谷 P1060 開心的金明 01揹包

2021-10-10 17:15:25 字數 2280 閱讀 8006

題目描述

金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說:「你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過 n

nn 元錢就行」。今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的 n

nn 元。於是,他把每件物品規定了乙個重要度,分為 5

55 等:用整數 1−5

1-51−

5 表示,第 5

55 等最重要。他還從網際網路上查到了每件物品的**(都是整數元)。他希望在不超過 n

nn 元(可以等於 n

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

設第 j

jj 件物品的**為 v[j

]v[j]

v[j]

,重要度為 w[j

]w[j]

w[j]

,共選中了 k

kk 件物品,編號依次為 j1,

j2,…

,jkj_1,j_2,…,j_k

j1​,j2

​,…,

jk​ ​,則所求的總和為:v[j

1]×w

[j1]

+v[j

2]×w

[j2]

+…+v

[jk]

×w[j

k]v[j_1] \times w[j_1]+v[j_2] \times w[j_2]+ …+v[j_k] \times w[j_k]

v[j1​]

×w[j

1​]+

v[j2

​]×w

[j2​

]+…+

v[jk

​]×w

[jk​

] 。請你幫助金明設計乙個滿足要求的購物單。

輸入格式

第一行,為 2

22 個正整數,用乙個空格隔開:n,m

n,mn,

m(其中 n

(<

30000

)n(<30000)

n(<30

000)

表示總錢數,m

(<25)

m(<25)

m(<25

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

從第 2

22 行到第 m+1

m+1m+

1 行,第 j

jj 行給出了編號為 j−1

j-1j−

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

22 個非負整數 v

pv\ p

vp(其中 v

vv 表示該物品的** (v≤

10000

)(v≤10000)

(v≤100

00) ,p

pp 表示該物品的重要度(1−5

1-51−

5)。輸出格式

1

11 個正整數,為不超過總錢數的物品的**與重要度乘積的總和的最大值(

<

100000000

)(<100000000)

(<10

0000

000)

輸入輸出樣例

輸入 #1

1000

5800

2400

5300

5400

3200

2

輸出 #1

3900
說明/提示noip 2006 普及組 第二題

本題中每個物品的**是01揹包中的代價,每個物品的**乘以重要度是價值

#include

using

namespace std;

const

int maxn =

30010

, maxm =30;

int n, m;

int v[maxm]

, w[maxm]

, dp[maxn]

;int

main()

提交結果如下:

洛谷 P1060 開心的金明(01揹包)

金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過 n 元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的 n 元。於是,他把每件物品規定了乙個重要度...

洛谷 P1060 開心的金明

題目描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n元。於是,他把每件物品規定了乙個重要...

洛谷 P1060 開心的金明

題目描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n元。於是,他把每件物品規定了乙個重要...