1. 程式人生 > >機器分配

機器分配

題目描述

某總公司擁有高效生產裝置M臺,準備分給下屬的N個分公司。各分公司若獲得這些裝置,可以為總公司提供一定的盈利。問:如何分配這M臺裝置才能使國家得到的盈利最大?求出最大盈利值。
分配原則:每個公司有權獲得任意數目的裝置,但總檯數不得超過總裝置數M。其中M<=100,N<=100。

輸入
第一行為兩個整數M,N。接下來是一個N×M的矩陣,其中矩陣的第i行的第j列的數Aij表明第i個公司分配j臺機器的盈利。所有資料之間用一個空格分隔。

輸出
只有一個數據,為總公司分配這M臺裝置所獲得的最大盈利。

輸入樣例
3 2
1 2 3
2 3 4

輸出樣例
4
.
.
.
.
.
分析

f[i][j]表示前i個公司分配j個機器的最大盈利
f[i][j]=max(f[i][j],f[i-1][k]+a[i][j-k]);
.
.
.
.
.
程式:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
	int n,m,f[200][200],a[200][200];
	scanf("%d%d",&m,&n);
	for (int i=1;i<=n;i++)
		for (int j=1;j<=m;j++)
			scanf("%d",&a[i][j]);
	memset(f,sizeof(f),0);
	for (int i=1;i<=n;i++)
		for (int j=1;j<=m;j++)
			for (int k=0;k<=j;k++)
				f[i][j]=max(f[i-1][k]+a[i][j-k],f[i][j]);
	printf("%d",f[n][m]);
	return 0;
}