總公司擁有m臺 相同 的高效裝置,準備分給下屬的n個分公司。
各分公司若獲得這些裝置,可以為國家提供一定的盈利。盈利與分配的裝置數量有關。
問:如何分配這m臺裝置才能使國家得到的盈利最大?
求出最大盈利值。
分配原則:每個公司有權獲得任意數目的裝置,但總台數不超過裝置數m。
輸入格式
第一行有兩個數,第乙個數是分公司數n,第二個數是裝置台數m;
接下來是乙個n*m的矩陣,矩陣中的第 i 行第 j 列的整數表示第 i 個公司分配 j 臺機器時的盈利。
輸出格式
第一行輸出最大盈利值;
接下n行,每行有2個數,即分公司編號和該分公司獲得裝置台數。
答案不唯一,輸入任意合法方案即可。
資料範圍
1≤n≤10,
1≤m≤15
分析:將機器輸入樣例:
3 330 40 50
20 30 50
20 25 30
輸出樣例:
701 1
2 13 1
總量
m<
=>揹包
容量,公
司總量n
<
=>可選
物品總量
,第i個
公司對j
臺裝置的
收益
<
=>第i
種物品中
體積為j
的物品的
收益
。將機器總量m<=>揹包容量,公司總量n<=>可選物品總量,\\第i個公司對j臺裝置的收益<=>第i種物品中體積為j的物品的收益。
將機器總量m
<
=>揹包
容量,公
司總量n
<
=>可選
物品總量
,第i個
公司對j
臺裝置的
收益<
=>第i
種物品中
體積為j
的物品的
收益。
這 樣,
問題就轉
化為分組
揹包問題
,考慮每
種物品選
哪個的問
題。
這樣,問題就轉化為分組揹包問題,考慮每種物品選哪個的問題。
這樣,問題就
轉化為分
組揹包問
題,考慮
每種物品
選哪個的
問題。
**:
#include
#include
using
namespace std;
const
int n=20;
int n,m,f[n]
[n],w[n]
[n];
int cnt[n]
;int
main()
for(
int i=
1;i<=n;i++
) cout<" "<
}
揹包問題求具體方案
第二天叫醒我的不是鬧鐘,是夢想!有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。第 i 件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出 字典序最小的方案。這裡的字典序是指 所選物品的編號所構成的序列。物品的編號範圍是 ...
揹包問題求方案數 揹包問題求具體方案
在01揹包的基礎上要求出最優解的方案數 具體的方案 揹包問題求方案數 題目鏈結 解題思路 我們可以設定乙個與陣列f功能類似的陣列g,其中f i 儲存的是體積等於i的最優解 這裡是等於,之前的部落格說的是小於等於,原因後面會說 而g i 儲存的是體積等於i時的最優解的方案數,而f i 為什麼儲存的是等...
揹包九講 之 01揹包問題求具體方案
本文基於01揹包問題 問題重述 有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。第 i 件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出 字典序最小的方案。這裡的字典序是指 所選物品的編號所構成的序列。物品的編號範圍是 ...