洛谷 P2066 机器分配

Posted tech-chen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P2066 机器分配相关的知识,希望对你有一定的参考价值。

 题目背景 Background
 题目描述 Description
总公司拥有高效设备M台,准备分给下属的N个分公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。其中M≤15,N≤10。分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数M。
 输入输出格式 Input/output
输入格式:
第一行有两个数,第一个数是分公司数N,第二个数是设备台数M。
接下来是一个N*M的矩阵,表明了第 I个公司分配 J台机器的盈利。
输出格式:
第1行为最大盈利值
第2到第n为第i分公司分x台
 输入输出样例 Sample input/output
样例测试点#1
输入样例: 

3 3
30 40 50
20 30 50
20 25 30

输出样例:

70
1 1
2 1
3 1

代码:

技术分享
/*注意矩阵的含义:不是一个机器,而是同时拥有多个机器的收益*/
#include<iostream>
using namespace std;
#include<cstdio>
int n,m,a[11][16],f[11][16];
int sum[11];
void input()
{
    scanf("%d%d",&n,&m);//n company m jiqi 
    for(int i=1;i<=n;++i) 
    {
          for(int j=1;j<=m;++j)
              scanf("%d",&a[i][j]);
              
          f[i][1]=max(a[i][1],f[i-1][1]);
    }
    for(int i=1;i<=m;++i)
    f[1][i]=a[1][i];
}
void dp()
{
    for(int i=2;i<=n;++i)
      for(int j=1;j<=m;++j)
        for(int t=1;t<=j;++t)
         {
              if(f[i][j]>f[i-1][t]+a[i][j-t]) continue;
             f[i][j]=f[i-1][t]+a[i][j-t];
             sum[i]=j-t;/*记录第i个公司有多少机器*/
         }
    int N=0;
    for(int i=2;i<=n;++i)
    N+=sum[i];
    sum[1]=m-N;
    cout<<f[n][m]<<endl;
    for(int i=1;i<=n;++i)
    printf("%d %d\n",i,sum[i]);
}
int main()
{
    input();
    dp();
    return 0;
}
View Code

 

以上是关于洛谷 P2066 机器分配的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P2066 机器分配

洛谷 p2066 机器分配

P2066 机器分配

P2066 机器分配 解析

洛谷 P1540 机器翻译 题解

洛谷——P1540 机器翻译