1. 程式人生 > >挑戰程序設計競賽準備篇---(二)三角形(貪心)

挑戰程序設計競賽準備篇---(二)三角形(貪心)

const bsp font gpo log 條件 fine cin 最大

問題描述:
有n個棍子,棍子i的長度為ai。想要從中選出3個棍子組成周長盡可能長的三角形。請輸出最大的周長,若無法組成三角形則輸出0.

限制條件:
3 ≤ n ≤ 100

1 ≤ ai ≤ 106

1.簡單暴力:
直接三重循環枚舉,如果可行更新最優解

2.貪心:

先排序,從大到小區最長的三根,如果可以構成三角形,直接輸出,不行的話,去掉最長的。(因為最長的三根不能構成三角形,那說明最長的那一根太長了,所以必須去掉),剩下的n-1根同樣的進行上述算法。時間復雜度O(nlog(n) + n)主要是排序的時間。

 1 #include<bits/stdc++.h> 
 2 #define FOR(i, a, b) for(int i = a; i < b; i++)
 3
using namespace std; 4 const int maxn = 1e3 + 10; 5 int a[maxn]; 6 int n; 7 int solve() 8 { 9 sort(a, a + n); 10 for(int i = n - 1; i >= 2; i--) 11 { 12 if(a[i] < a[i - 1] + a[i - 2])return (a[i] + a[i - 1] + a[i - 2]); 13 } 14 return 0; 15 } 16 int main() 17 {
18 cin >> n; 19 for(int i = 0; i < n; i++)cin >> a[i]; 20 cout<<solve()<<endl; 21 }

挑戰程序設計競賽準備篇---(二)三角形(貪心)