動態規劃 開心的金明 題解 C

2021-10-03 01:44:53 字數 1532 閱讀 3926

又見面了~

今天這個題目是有關動態規劃的題目,而且也不難,不說了,直接聽題吧:

**** 開心的金明

點一下即可,實在不想點也可以看下面(那為什麼要點??? )。

題目描述

金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。 更讓他高興的是,媽媽昨天對他說:「你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過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 元。於是,他把每件物...