题目: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;
}
京公网安备 11010502036488号