例9.10机器分配
Posted Ed_Sheeran
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了例9.10机器分配相关的知识,希望对你有一定的参考价值。
【例9.10】机器分配
链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1266
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
总公司拥有高效设备M台,准备分给下属的N个分公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。其中M≤15,N≤10。分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数M。
【输入】
第一行有两个数,第一个数是分公司数N,第二个数是设备台数M;
接下来是一个N*M的矩阵,表明了第 I个公司分配 J台机器的盈利。
【输出】
第一行输出最大盈利值;
接下N行,每行有2个数,即分公司编号和该分公司获得设备台数。
【输入样例】
3 3 //3个分公司分3台机器 30 40 50 20 30 50 20 25 30
【输出样例】
70 //最大盈利值为70 1 1 //第一分公司分1台 2 1 //第二分公司分1台 3 1 //第三分公司分1台
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int v[15][25],f[15][25],a[15]; const int maxn=10000005; int show(int n,int m) { if(!n)return 0; for(int k=0;k<=m;k++) if(f[n-1][k]+v[n][m-k]==f[n][m]) { show(n-1,k); cout<<n<<" "<<m-k<<endl; break; } } int main() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>v[i][j]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { for(int k=0;k<=j;k++) if(f[i-1][k]+v[i][j-k]>f[i][j]) f[i][j]=f[i-1][k]+v[i][j-k]; } cout<<f[n][m]<<endl; show(n,m); }
以上是关于例9.10机器分配的主要内容,如果未能解决你的问题,请参考以下文章