題目描述
總公司擁有高效裝置m臺,準備分給下屬的n個分公司。各分公司若獲得這些裝置,可以為國家提供一定的盈利。問:如何分配這m臺裝置才能使國家得到的盈利最大?求出最大盈利值。其中m≤15,n≤10。分配原則:每個公司有權獲得任意數目的裝置,但總台數不超過裝置數m。
輸入輸出格式
輸入格式:
第一行有兩個數,第乙個數是分公司數n,第二個數是裝置台數m。
接下來是乙個n*m的矩陣,表明了第 i個公司分配 j臺機器的盈利。
輸出格式:
第1行為最大盈利值
第2到第n為第i分公司分x臺
我們分析,對於分配給前i個公司j臺機器的價值,實際上相當於前i-1個公司分配k臺機器並給第i個公司分配j-k臺機器的價值總和。由此,這種最優子結構自然讓我們能列出如下的轉移方程:
令f[i][j]表示分配給前i個公司j臺機器的價值,則有
f[i][j]=f[i-1][k]+v[i][j-k]
其中,k從0~j迴圈,取出最大值即可。
我們很容易寫出轉移過程的**:
f[i][j]=max(f[i][j],f[i-1][k]+v[i][j-k]);
那麼,如何將轉移的過程記錄下來呢?我們可以在計算完成後,採用倒推的思想。採用遞迴實現的具體過程如下:
void print_link(int i,int j)
return;
}
核心部分已經完成,我們來撰寫剩餘的**:
#include
#include
#define reset(x) memset(x,0,sizeof(x))
#define max(x,y) (x>y?x:y)
using namespace std;
int v[20][20],f[20][20];
void print_link(int i,int j)
return;
}int main()
動態規劃 機器分配
問題描述 機器分配 hnoi 95 一 問題描述 總公司擁有高效生產裝置 m 臺,準備分給下屬的 n 個公司。各分公司若獲得這些裝置,可以為國家提供一定的盈利。問 如何分配這 m 臺裝置才能使國家得到的盈利最大?求出 最大盈利值。其中 m 15,n 10。分配原則 每個公司有權獲得任意數目的裝置,但...
動態規劃 機器分配
時間限制 1 sec 記憶體限制 64 mb 提交 7 解決 4 提交 狀態 討論版 命題人 題目描述 魔法學院購進高效生產裝置m台以轉換魔法石能量,準備分給學院的n個小組。各小組若獲得這些裝置,可以為學院提供一定的魔法石能量。問 如何分配這m臺裝置才能使魔法石能量最大?求出最大魔法石能量值。其中m...
43 動態規劃 機器分配問題
import random as rd from pyscipopt import model,quicksum def sub ll print l,digit s for i in range len l s s str l i temp l i digit temp 1 while temp ...