分配机器
Time Limit:1000MS Memory Limit:65536K
Description
何老板新购买了高效生产机器M台,准备分给下属的N个分公司。各分公司若获得这些机器,可以为何老板提供一定的盈利。问:如何分配这M台机器才能使何老板得到的盈利最大?求出最大盈利值。
分配原则:每个公司有权获得任意数目的机器,但总台数不得超过总机器数M。其中M<=100,N<=100。
Input
第一行为两个整数M,N。接下来是一个N×M的矩阵,其中矩阵的第i行的第j列的数Aij表明第i个公司分配j台机器的盈利。所有数据之间用一个空格分隔。
Output
只有一个数据,表示何老板分配这M台机器所获得的最大盈利。
Sample Input
3 2
1 2 3
2 3 4
Sample Output
4
#include <stdio.h>
int a[101], f[2][101];
inline void _read(int& d)
{
char t=getchar();bool f=false;
while(t<'0'||t>'9') {if(t=='-') f=true; t=getchar();}
for(d=0;t<='9'&&t>='0';t=getchar()) d=d*10+t-'0';
if(f) d=-d;
}
inline void _out(int d)
{
int o[30],top=1;
if(d==0){putchar('0');return ;}
if(d<0) {putchar('-');d=-d;}
while(d)
{
o[top++]=d%10;
d/=10;
}
for(--top;top;--top) putchar('0'+o[top]);
}
int main()
{
int m, n, i, j, k, max, mid, *p0=f[0], *p1=f[1], *t;
_read(m), _read(n);
for(i=1; i<=n; i++, t=p0, p0=p1, p1=t)
for(j=1; j<=m; j++)
{
_read(a[j]);
max=0;
for(k=j; k>=0; k--)
{
mid=p1[k]+a[j-k];
if(mid>max) max=mid;
}
p0[j]=max;
}
_out(f[!(n%2)][m]);
return 0;
}