Problem Description
某总公司拥有设备M台,准备分给下属的N个子公司。各子公司若获得这些设备,可以为总公司赚取一定的盈利。
如何分配这M台设备才能使总公司得到的盈利最大?
请输出最大盈利值。
Input
输入包含多组测试数据。
每组数据第一行为两个整数N,M,表示有N个子公司,M台设备。
接下来是一个N×M的矩阵,其中矩阵的第i行的第j列的数Aij表明第i个子公司分配j台机器的盈利。
其中:
N <= 100
M <= 100
Output
请计算总公司合理分配这M台设备所获得的最大盈利。
每组数据输出一行。
Sample Input
2 3
1 2 3
2 3 4
Sample Output
4
代码
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int a[101][101];
int dp[101][101]; //用dp(i,j)表示前i个子公司分配j台设备给的最大盈利情形
int main()
{
int n, m;
while(scanf("%d%d", &n, &m)!=EOF)
{
// 获取原始数据
for (int i=1; i<=n; i++)
{
for (int j=1; j<=m; j++)
{
scanf("%d", &a[i][j]);
dp[i][j] = 0;
}
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
for (int k=0; k<=j; k++)
{
dp[i][j] = max(dp[i][j], dp[i-1][k]+a[i][j-k]);
// cout<<i<<"-"<<j<<"-"<<k<<":"<<dp[i][j]<<endl; // 调试用
}
}
}
printf("%d\n", dp[n][m]);
}
return 0;
}