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;
}

posted on 2025-05-13 09:16  LEESOL-cn  阅读(8)  评论(0)    收藏  举报

导航