给定M个资源,分配给N个部门,每个部门获得不同数目的资源有不同的盈利值,求怎样分配使得盈利值最大。
#include<string.h>
#include<cstdio>
#include<cstdlib>
#include<vector>
#include<iostream>
#include<algorithm>
#define INF 1<<20
using namespace std;
int m,n;
long i,j,k,Max;
int f[11][16],value[11][16];
void show(long i,long j)
{
long k;
if(i==0)
return;
for(k=0;k<=j;k++)
if(Max==f[i-1][k]+value[i][j-k])
{
Max=f[i-1][k];
show(i-1,k);
printf("%ld %ld\n",i,j-k);
return;
}
}
int main()
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&value[i][j]);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
Max=0;
for(k=0;k<=j;k++)
if(f[i-1][k]+value[i][j-k]>Max)
Max=f[i-1][k]+value[i][j-k];
f[i][j]=Max;
}
printf("%d\n",f[n][m]);
show(n,m);
return 0;
}