PAT甲级——1037 Magic Coupon——分数 25
题目

题目大意:求两个数组各元素之积的和的最大值,所有元素只能用一次
解法1
点击查看代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// 读取优惠券数据
int Nc;
cin >> Nc;
vector<long long> coupons(Nc);
for (int i = 0; i < Nc; ++i) {
cin >> coupons[i];
}
// 读取商品数据
int Np;
cin >> Np;
vector<long long> products(Np);
for (int i = 0; i < Np; ++i) {
cin >> products[i];
}
// 对两个数组进行排序
sort(coupons.begin(), coupons.end());
sort(products.begin(), products.end());
long long maxValue = 0;
int i = 0, j = 0;
// 处理负数部分:最小优惠券 * 最小商品
while (i < Nc && j < Np && coupons[i] < 0 && products[j] < 0) {
maxValue += coupons[i] * products[j];
i++;
j++;
}
// 处理正数部分:最大优惠券 * 最大商品
int k = Nc - 1, l = Np - 1;
while (k >= i && l >= j && coupons[k] > 0 && products[l] > 0) {
maxValue += coupons[k] * products[l];
k--;
l--;
}
cout << maxValue << endl;
return 0;
}
浙公网安备 33010602011771号