杭电2017新生赛1009-最大收益

来源:互联网 发布:交通数据开放平台 编辑:程序博客网 时间:2024/05/29 12:56

最大收益

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1218    Accepted Submission(s): 142


Problem Description
Elly的叔叔经营一家电脑装配公司ShumenSoft,为了使公司得到最大获益,他们日以继夜地工作着。

众所周知,一个电脑系统包含一个处理器和显示器。
在ShumenSoft公司的仓库中有N个处理器和M个显示器。第i个处理器花费Ai美元,第j个显示器花费Bj美元。包含第i个处理器和第j个显示器的电脑系统的价格是Ai*Bj。由于世界金融危机你必须装配尽可能多的电脑系统并且使它们的总价达到最大。

现在这个任务交给了你,相信你可圆满解决的。
 

Input
输入数据共3行——
第 1 行:包含两个整数 N 和 M;
第 2 行:包含 N 个整数,第 i 个数表示第 i 个处理器的价钱 Ai;
第 3 行:包含 M 个整数,第 j 个数表示第 j 个显示器的价钱 Bj。

1≤N,M≤100000,
1≤Ai,Bj≤100000
 

Output
输出数据共1行。
包含两个整数(用空格隔开)表示最多能组装的电脑系统和他们的最大价钱总和。
 

Sample Input
4 21 2 3 45 6
 

Sample Output
2 39
很显然,将A,B序列排序 最大的min(N,M)对数相乘即为答案

#include<iostream>#include<algorithm>using namespace std;int main(){    int n,m;    int can;    long long int a[100005];    long long int b[100005];    while(cin>>n>>m){        if(n<m)can=n;        else can=m;        long long int add=0;         for(int i=0;i<n;i++)cin>>a[i];        for(int i=0;i<m;i++)cin>>b[i];        sort(a,a+n);        sort(b,b+m);        for(int i=1;i<=can;i++){            add+=a[n-i]*b[m-i];        }        cout<<can<<" "<<add<<endl;    }} 



原创粉丝点击