又見面了~
今天這個題目是有關動態規劃的題目,而且也不難,不說了,直接聽題吧:
**** 開心的金明
點一下即可,實在不想點也可以看下面(那為什麼要點??? )。
題目描述
金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。 更讓他高興的是,媽媽昨天對他說:「你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n 元錢就行」。 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n 元。 於是,他把每件物品規定了乙個重要度,分為5等:用整數1 ~5 表示,第5 等最重要。 他還從網際網路上查到了每件物品的**(都是整數元)。 他希望在不超過n 元(可以等於n 元)的前提下,使每件物品的**與重要度的乘積的總和最大。
設第j件物品的**為v[j] ,重要度為w[j] ,共選中了k 件物品,編號依次為j1 ,j2 ,……,jk ,則所求的總和為:
v[j1]∗w[j1]+v[j2]∗w[j2]+…+v[jk]∗w[jk] 。(其中∗ 為乘號)
請你幫助金明設計乙個滿足要求的購物單。
輸入格式:
輸入的第1 行,為兩個正整數,用乙個空格隔開:
n m (其中n (<30000 )表示總錢數,m (<25 )為希望購買物品的個數。)
從第2 行到第m+1 行,第j 行給出了編號為j−1 的物品的基本資料,每行有2 個非負整數
v p (其中v 表示該物品的**(v<=10000) ,p表示該物品的重要度(1 ~5) )
輸出格式:
輸出只有乙個正整數,為不超過總錢數的物品的**與重要度乘積的總和的最大值(<100000000 )。
首先先來一點點的思路:
當做這一看到這一題,就感覺這道題像極了愛情 動態規劃,而且至少金明的物品要麼買,要麼不買,不信你可以找商家訂購半個衣櫃試試。
#include
using
namespace std;
int v[30]
,w[30];
//全域性變數中會自動幫你清0
int m;
intfill
(int num/*當前在判斷第num個數*/
,int remain/*剩餘錢數*/
,int money/*所能獲得的最大價值*/
)int a =
fill
(num+
1,remain,money)
;//不選當前這個物品所獲得的最大價值
int b =0;
if(money>=v[num]
)return
max(a,b)
;//取a,b中較大值返回
}int
main()
cout<<
fill(0
,n,0);
}
開心的金明 動態規劃 洛谷
金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n元。於是,他把每件物品規定了乙個重要度,分為5...
c 開心的金明
題目描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n 元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n 元。於是,他把每件物品規定了乙個...
開心的金明
開心的金明 問題描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n 元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n 元。於是,他把每件物...