挑战程序设计竞赛(第2版)1.6.1题
O(nlogn)的算法
int n, a[MAX_N];
void solve(){
int ans = 0;
sort(a,a+n-1);
for(int i=n-3;i>=0;i--){
if(a[i]+a[i+1]>a[i+2]){
ans = a[i]+a[i+1]+a[i+2];
break;
}
}
cout<<ans;
}
1、对所有边排序
2、从最长的三条边开始找,这三条边之和是当前最大的。
3、如果满足条件(前两条边之和大于第三边),那就是答案了。
4、如果不满足,那么任意两条边相加也不可能大于最大的这条边,舍弃最大的边,从步骤2开始重复。