題目描述
金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說:「你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過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,…
,j
kj_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,p
v,pv,
p(其中v
vv表示該物品的**(v≤
10000
)(v \le 10000)
(v≤100
00),p
pp表示該物品的重要度(1−5
1-51−
5)輸出格式
1
11個正整數,為不超過總錢數的物品的**與重要度乘積的總和的最大值(
<
100000000
)(<100000000)
(<10
0000
000)
。輸入輸出樣例
輸入 #1
1000 5
800 2
400 5
300 5
400 3
200 2
輸出 #1
說明/提示
noip 2006 普及組 第二題
題解從頭開始含淚複習dpdp
dp……乙個樸素的揹包問題,用dp[
i]
dp[i]
dp[i
]表示花費i
ii元可以買到的最大價值,然後列舉每個物品j
jj,轉移方程為dp[
i+v[
j]]=
max(
dp[i
+v[j
]],d
p[i]
+v[j
]×w[
j]
)dp[i+v[j]]=max(dp[i+v[j]],dp[i]+v[j]\times w[j])
dp[i+v
[j]]
=max
(dp[
i+v[
j]],
dp[i
]+v[
j]×w
[j])
更新每個花費的最優解。
記得列舉花費時要從大到小列舉,否則乙個物品會被購買多次。
**
#include
using
namespace std;
const
int n=
3e4+5;
int dp[n]
,v[30
],w[30]
;int n,m,ans;
voidin(
)voidac(
)int
main()
luogu1060開心的金明
金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n元。於是,他把每件物品規定了乙個重要度,分為5...
luogu1060 開心的金明 01採藥
知道時間 t 有n 株備選藥品,知道每件物品需要 v,價值 w 求 t 時間內,能採摘的最大價值的藥 用 i 表示當前可以放進箱子的物品總數量 1 5 這是乙個 5選x 的組合問題。題目要求知道最優狀態,所以可以忽略過程 降維分析,因為只考慮物體的體積,不考慮形狀等亂七八糟的東西,用打表 用遞推的思...
開心的金明 洛谷 1060
題目描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n元。於是,他把每件物品規定了乙個重要...