http://tyvj.cn/p/1203
dp题,设f[i][j]为前i个公司分配j个机器的最大盈利,设v为第I个公司分配J台机器的盈利
则f[i][j] = max{f[i-1][k]+v[i][j-k]}
答案是max{f[n][j]} 注意机器不一定要全部分完m个!
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main ()
{
const int maxnm = 100 + 5;
int map[maxnm][maxnm];
int n,m;
scanf("%d%d", &n, &m);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
scanf("%d", &map[i][j]);
int maxf=-1;
int f[maxnm][maxnm];
f[1][0] = 0;
for (int i=1; i<=m; i++) f[1][i] = map[1][i];
for (int i=2; i<=n; i++)
{
for (int j=0; j<=m; j++)
{
f[i][j] = 0;
for (int k=0; k<=j; k++)
{
f[i][j] = max(f[i][j], f[i-1][k]+map[i][j-k]);
}
if (i==n)
maxf = max(maxf, f[i][j]);
}
}
printf("%d\n", maxf);
return 0;
}

本文介绍了一种使用动态规划解决机器分配问题的方法,通过构建二维数组f[i][j]来记录前i个公司分配j个机器所能获得的最大盈利,并给出了具体的实现代码。

1496

被折叠的 条评论
为什么被折叠?



