3-16 hdu机器分配

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

思路:

要使得利益最大化,每次只要 i 个公司 j 台机器利益最大。
而 i 个公司 j 台机器利益最大,也就是要 i - 1 个公司有 z 台机器利益最大化+ 第 i 个公司有 j - z 台机器最大利益把所有情况推导一遍就可以。其实也可bfs一下。

dp核心:

	maxs = max( maxs , f [ i - 1 ] [ z ] + s [ i ] [ j - z ] ) ;

AC代码:

#include<bits/stdc++.h>
using namespace std;

int n,m,maxs;
int f[105][105],s[105][105];

int main(){
	while(cin>>n>>m){
		memset(f,0,sizeof f);
		memset(s,0,sizeof s);
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
				cin>>s[i][j];
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){//前i个公司分配j台最优值 
				maxs=0;
				for(int z=0;z<=j;z++){//第i个公司分配j-z台 
					maxs=max(maxs,f[i-1][z]+s[i][j-z]);
				}
				f[i][j]=maxs;	//i个公司分配j台的最优解。 
			}
		}
		cout<<f[n][m]<<endl;
	}
	return 0;
}
发布了34 篇原创文章 · 获赞 6 · 访问量 1339

猜你喜欢

转载自blog.csdn.net/qq_44669377/article/details/104908859