链接:点击打开链接
题意:有n个元素,每个元素含有a,b两个属性,现在要讲n个元素分成两部分X,Y。求X中a的最大值加上Y中b的最大值的和最小是多少
代码:
#include <queue>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
struct node{
int a,b;
friend bool operator<(node x,node y){
return x.a<y.a;
}
}s[100005];
int r[100005];
int main(){
int t,n,i,j,ans,cas;
scanf("%d",&t);
for(cas=1;cas<=t;cas++){
scanf("%d",&n);
for(i=0;i<n;i++) //按照a从小到大排序,并维护b的最大值
scanf("%d%d",&s[i].a,&s[i].b); //最后枚举每个位置即可
sort(s,s+n);
r[n-1]=s[n-1].b;
for(i=n-2;i>=0;i--)
r[i]=max(r[i+1],s[i].b);
ans=s[0].a+r[1];
for(i=1;i<=n-2;i++)
ans=min(ans,s[i].a+r[i+1]);
printf("Case %d: %d\n",cas,ans);
}
return 0;
}