1013 機器分配

2022-10-04 02:24:10 字數 1582 閱讀 2930

總公司擁有\(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。分配原則 每個公司有權...