PAT甲题题解-1037. Magic Coupon (25)-贪心,水
Posted 辰曦~文若
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT甲题题解-1037. Magic Coupon (25)-贪心,水相关的知识,希望对你有一定的参考价值。
题目说了那么多,就是给你两个序列,分别选取元素进行一对一相乘,求得到的最大乘积。
将两个序列的正和负数分开,排个序,然后分别将正1和正2前面的相乘,负1和负2前面的相乘,累加和即可。
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> #include <cmath> #include <vector> using namespace std; const int maxn=100000+5; int coupon1[maxn]; int c1; int coupon2[maxn]; int c2; int product1[maxn]; int product2[maxn]; int p1,p2; bool cmp(int a,int b){ return a>b; } int main() { int nc,np; long long tmp; c1=c2=p1=p2=0; scanf("%d",&nc); for(int i=0;i<nc;i++){ scanf("%lld",&tmp); if(tmp>=0) coupon1[c1++]=tmp; else coupon2[c2++]=tmp; } scanf("%d",&np); for(int i=0;i<np;i++){ scanf("%lld",&tmp); if(tmp>=0) product1[p1++]=tmp; else product2[p2++]=tmp; } long long ans=0; sort(coupon1,coupon1+c1,cmp); sort(product1,product1+p1,cmp); sort(coupon2,coupon2+c2); sort(product2,product2+p2); int min1=min(c1,p1); for(int i=0;i<min1;i++){ ans+=coupon1[i]*product1[i]; } int min2=min(c2,p2); for(int i=0;i<min2;i++){ ans+=coupon2[i]*product2[i]; } printf("%lld\n",ans); return 0; }
以上是关于PAT甲题题解-1037. Magic Coupon (25)-贪心,水的主要内容,如果未能解决你的问题,请参考以下文章
PAT Advanced 1037 Magic Coupon (25) [贪?算法]
PAT (Advanced Level) 1037. Magic Coupon (25)
PAT甲题题解-1075. PAT Judge (25)-排序