總公司擁有高效裝置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時,共有四種方式可以將集合 分為兩個部分和相同的子集合 和 和 和 和 輸入 程式從標準輸入讀入資料,只有一組測試用例...