1. 程式人生 > >1133】不重疊的線段 (貪心)

1133】不重疊的線段 (貪心)

題幹:

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 ;
}