動態規劃經典例子

2021-10-22 08:36:26 字數 1027 閱讀 5040

總公司擁有高效裝置m臺,準備分給下屬的n個分公司。各分公司若獲得這些裝置,可以為國家提供一定的盈利。問:如何分配這m臺裝置才能使國家得到的盈利最大?求出最大盈利值。其中m≤15,n≤10。分配原則:每個公司有權獲得任意數目的裝置,但總台數不超過裝置數m。

輸入格式

第一行有兩個數,第乙個數是分公司數n,第二個數是裝置台數m。

接下來是乙個n*m的矩陣,表明了第 i個公司分配 j臺機器的盈利。

輸出格式

第1行為最大盈利值

第2到第n為第i分公司分x臺

p.s.要求答案的字典序最小

輸入輸出樣例

輸入3 3

30 40 50

20 30 50

20 25 30

輸出70

1 12 1

3 1題目鏈結

模板題,輸出每個公司分配的機器數時逆向匹配就好。

#include

int v[20]

[20]=

;//表示前i個公司分配j臺機器的最大盈利

int f[20]

[20]=

;//第i個公司分配j臺機器的盈利

void

show

(int i,

int j,

int max)

for(

int k =

0; k <= j; k++)}

}int

main

(int argc,

char

const

**ar**)

}for

(int i =

1; i <= n; i++)}

}}printf

("%d\n"

, max)

;show

(n, m, max)

;return0;

}

動態規劃經典例子

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

動態規劃經典例子

求第一層到最後一層的路徑,將該路徑上的所有數字相加後得到的和最大是多少。include using namespace std const int maxn 1000 int f maxn maxn dp maxn maxn int main for int i 1 i n i for int i ...

動態規劃例子

對於由從1到n 1 n 39 這n個連續的整數組成的集合來說,我們有時可以將集合分成兩個部分和相同的子集合。例如,n 3時,可以將集合 分為和。此時稱有一種方式 即與順序無關 n 7時,共有四種方式可以將集合 分為兩個部分和相同的子集合 和 和 和 和 輸入 程式從標準輸入讀入資料,只有一組測試用例...