1266:機器分配

 

【題目描述】

總公司擁有高效設備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臺
//Created on 2020/2/17

#include<bits/stdc++.h>

using namespace std;

const int idata=100+5;
const int maxn=0x3f3f3f3f;
long maps[idata][idata];
//long judge[idata][idata];
int record[idata][idata];
int cnt[idata][idata];
//int delta[2][2]={{1,0},{0,1}};
int flag[idata][idata];
long maxx;
int n,m;

inline void print(int x,int y)
{
    if(x==0)
    return ;

    print(x-1,y-flag[x][y]);
    cout<<x<<" "<<flag[x][y]<<endl;
}

int main()
{
    register int i,j,k;
    cin>>n>>m;

    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
            cin>>maps[i][j];
    }

    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            for(k=0;k<=j;k++)
            {
                if(record[i][j]<record[i-1][k]+maps[i][j-k])
                {
                    record[i][j]=record[i-1][k]+maps[i][j-k];
                    flag[i][j]=j-k;
                }
            }
        }
    }

    cout<<record[n][m]<<endl;
    print(n,m);
    return 0;
}

 

發佈了221 篇原創文章 · 獲贊 10 · 訪問量 9498
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章