總公司擁有\(m\)臺相同的高效裝置,準備分給下屬的n個分公司。
各分公司若獲得這些裝置,可以為國家提供一定的盈利。盈利與分配的裝置數量有關。
問:如何分配這m臺裝置才能使國家得到的盈利最大?
求出最大盈利值。
分配原則:每個公司有權獲得任意數目的裝置,但總台數不超過裝置數m。
第一行有兩個數,第乙個數是分公司數\(n\),第二個數是裝置台數\(m\);
接下來是乙個\(n*m\)的矩陣,矩陣中的第 \(i\) 行第 \(j\) 列的整數表示第 \(i\) 個公司分配 \(j\) 臺機器時的盈利。
第一行輸出最大盈利值;
接下\(n\)行,每行有\(2\)個數,即分公司編號和該分公司獲得裝置台數。
答案不唯一,輸出任意合法方案即可。
資料範圍
\(1≤n≤10,\)
\(1≤m≤15\)
輸入樣例:
3 3
30 40 50
20 30 50
20 25 30
輸出樣例:70
1 12 1
3 1
分組揹包將分公司當作組別,即從組別中選擇乙個,即分組揹包問題,關鍵在於如何反推出路徑,可利用狀態轉移方程逆向轉移,
dfs
逆向從最後乙個點推向第乙個點
// problem: 機器分配
// contest: acwing
// url:
// memory limit: 64 mb
// time limit: 1000 ms
// // powered by cp editor (
// %%%skyqwq
#include //#define int long long
#define help
#define pb push_back
#define fi first
#define se second
#define mkp make_pair
using namespace std;
typedef long long ll;
typedef pairpii;
typedef pairpll;
template bool chkmax(t &x, t y)
template bool chkmin(t &x, t y)
template void inline read(t &x)
while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar();
x *= f;
}int n,m,f[15][20],a[15][20],res[15];
void dfs(int x,int y)
}int main()
dfs(n,m);
cout
cout
}
DP 機器分配
總公司擁有高效生產裝置m臺,準備分給下屬的n個公司。各分公司若獲得這些裝置,可以為國家提供一定的盈利。問 如何分配這m臺裝置才能使國家得到的盈利最大?求出最大盈利值。其中m 15,n 10。分配原則 每個公司有權獲得任意數目的裝置,但總台數不得超過總裝置數m。第一行儲存兩個數,第乙個數是裝置台數m,...
機器分配 DP
題目 總公司擁有高效生產裝置m臺,準備分給下屬的n個公司。各分公司若獲得這些裝置,可以為國家提供一定的盈利。問 如何分配這m臺裝置才能使國家得到的盈利最大?求出最大盈利值。其中m 15,n 10。分配原則 每個公司有權獲得任意數目的裝置,但總台數不得超過總裝置數m。輸入 第一行儲存兩個數,第乙個數是...
機器分配 dp
時間限制 1000 ms 記憶體限制 65536 kb 提交數 1693 通過數 867 總公司擁有高效裝置m臺,準備分給下屬的n個分公司。各分公司若獲得這些裝置,可以為國家提供一定的盈利。問 如何分配這m臺裝置才能使國家得到的盈利最大?求出最大盈利值。其中m 15,n 10。分配原則 每個公司有權...