新人求助,站外题,本地AC提交RE
  • 板块学术版
  • 楼主Milky_Cat
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/1/8 10:24
  • 上次更新2023/10/24 05:12:21
查看原帖
新人求助,站外题,本地AC提交RE
906320
Milky_Cat楼主2023/1/8 10:24

原题:

已知第j个公司使用k台机器时,能得到的利润为a[j,k],问如何将m台机器在n个公司中分配,才能获得最大利润?要求输出能获得的最大利润及方案.将3台机器分配给2个公司能获得的盈利情况如下:

最大盈利为6,方案为公司2使用2台,公司1使用1台.

输入格式

第1行n,m 分别表示公司数和机器数 第2至第n+1行分别表示第i个公司分别使用每台机器的盈利情况,可结合题目描述进行理解。

输出格式

最大的盈利值为多少

输入样例

2 3
2 3 4
1 4 5

输出样例

6

RE0分代码

#include<bits/stdc++.h>
using namespace std;
long long a[450][450],n,m,f[10000005],f2[10000005],sum=0;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(int i=0;i<m;i++)
        for(int j=0;j<n;j++){
            cin>>a[i][j];
            sum+=a[i][j];
        }
    memset(f,-1,sizeof(f));
    f[0]=0;
    for(int i=0;i<m-1;i++)
        for(int j=0;j<n-1;j++)
            for(int k=sum;k>=0;k--){
                if(f[k]!=-1)
                    if(f[k+a[i][j]]==-1||a[m-i-2][j]+a[i][j]>k+a[i][j]){
                        f[k+a[i][j]]=a[i][j]+a[m-i-2][j],f2[k+a[i][j]]=i+j+2;/*cout<<i<<' '<<j<<' '<<m-i-2<<' '<<a[i][j]<<' '<<a[m-i-2][j]<<'\n';*/
                    }
            }
    long long max=0;
    for(int i=0;i<=sum;i++)
        if(f2[i]==m&&f[i]>max)max=f[i];
    cout<<max;
}
2023/1/8 10:24
加载中...