题目:Birthday Gift
来源:第三届中国计量大学ACM程序设计竞赛个人赛(同步赛)

解题思路

个球,每个球有两个属性值
随机选择两个球 ,其美丽值定义为
求美丽值的最大值。

个球按照 属性值从大到小的顺序排序。
确定球 ,遍历其后的球 ,则 是递减的,一旦其值不大于当前的最大美丽值,就可跳出循环。

C++代码

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

bool comp(vector<int>& v1, vector<int>& v2){
    return v1[0] > v2[0];
}

int main(){
    int n;
    cin >> n;
    vector<vector<int>> balls(n, vector<int>(2));
    for(int i=0; i<n; ++i)
        cin >> balls[i][0];
    for(int i=0; i<n; ++i)
        cin >> balls[i][1];
    sort(balls.begin(), balls.end(), comp);

    int ans = 0;
    for(int i=0; i<n; ++i){
        for(int j=i+1; j<n; ++j){
            int b1 = balls[i][0] + balls[j][1];
            int b2 = balls[i][1] + balls[j][0];
            if(b2 <= ans)
                break;
            ans = max(ans, min(b1, b2));
        }
    }
    cout << ans << endl;
    return 0;
}