1133】不重疊的線段 (貪心)
阿新 • • 發佈:2018-12-20
題幹:
X軸上有N條線段,每條線段有1個起點S和終點E。最多能夠選出多少條互不重疊的線段。(注:起點或終點重疊,不算重疊)。
例如:151523233636,可以選23233636,這2條線段互不重疊。
Input
第1行:1個數N,線段的數量(2 <= N <= 10000) 第2 - N + 1行:每行2個數,線段的起點和終點(-10^9 <= S,E <= 10^9)
Output
輸出最多可以選擇的線段數量。
Sample Input
3 1 5 2 3 3 6
Sample Output
2
解題報告:
按終點排序,也就是貪心出對後面影響最小的。
AC程式碼:
#include<bits/stdc++.h> using namespace std; int bk[30]; struct Node { int s,e; } node[10000 + 5]; bool cmp(const Node a,const Node b) { return a.e<b.e; } long long ans = 0; int main() { int n; int ans = 0; int cure; cin>>n; for(int i = 1; i<=n; i++) { scanf("%d %d",&node[i].s,&node[i].e); } sort(node+1,node+n+1,cmp); cure = node[1].e; ans = 1; for(int i = 2; i<=n; i++) { if(cure>node[i].s) continue; ans++;cure = node[i].e; } cout<<ans<<endl; return 0 ; }