机器分配
Description
某总公司拥有高效生产设备
M
台,准备分给下属的
各分公司若获得这些设备,可以为总公司提供一定的盈利。
问:如何分配这
M
台设备才能使国家得到的盈利最大?求出最大盈利值。
分配原则:每个公司有权获得任意数目的设备,但总台数不得超过总设备数
其中
M<=100
,
N<=100
。
Input
第一行为两个整数
M
,
接下来是一个
N×M
的矩阵,其中矩阵的第
i
行的第
所有数据之间用一个空格分隔。
Output
只有一个数据,为总公司分配这 M 台设备所获得的最大盈利。
Sample Input
3 2
1 2 3
2 3 4
Sample Output
4
Solution
设
fi,j=fi−1,k+Ci,j−k
Code
#include <iostream>
#include <cstdio>
#define Max(x,y) ((x)>(y)?(x):(y))
using namespace std;
int m,n;
int c[110][110];
int f[110][110];
int main(){
freopen("machine.in","r",stdin);
freopen("machine.out","w",stdout);
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&c[i][j]);
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][j],f[i-1][k]+c[i][j-k]);
printf("%d\n",f[n][m]);
return 0;
}