题目描述

分析:
贪心策略,对于正数和负数分开考虑,正数大的数乘大的数,负数小的数乘小的数
#include<iostream>
#include<algorithm>
using namespace std;
int a[100010],b[100010];
int main(){
int n,m;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
cin>>m;
for(int i=0;i<m;i++){
cin>>b[i];
}
sort(a,a+n);
sort(b,b+m);
int i=0,j,ans=0;
while(i<n&&i<m&&a[i]<0&&b[i]<0){
ans+=a[i]*b[i];
i++;
}
i=n-1;
j=m-1;
while(i>=0&&j>=0&&a[i]>0&&b[j]>0){
ans+=a[i]*b[j];
i--;
j--;
}
cout<<ans<<endl;
return 0;
}
本文介绍了一种使用贪心算法解决特定数学问题的方法,该问题的目标是通过选取两个数组中合适的元素进行配对相乘来获得最大的总乘积。文章详细阐述了算法思路,即正数和负数分开处理,确保每次都能选取最优元素进行乘法操作。
407

被折叠的 条评论
为什么被折叠?



