C語言貪心演算法之找點
阿新 • • 發佈:2019-01-26
找點
時間限制:2000 ms | 記憶體限制:65535 KB 難度:2- 描述
-
上數學課時,老師給了LYH一些閉區間,讓他取儘量少的點,使得每個閉區間內至少有一個點。但是這幾天LYH太忙了,你們幫幫他嗎?
- 輸入
- 多組測試資料。
每組資料先輸入一個N,表示有N個閉區間(N≤100)。
接下來N行,每行輸入兩個數a,b(0≤a≤b≤100),表示區間的兩個端點。 - 輸出
- 輸出一個整數,表示最少需要找幾個點。
- 樣例輸入
-
4 1 5 2 4 1 4 2 3 3 1 2 3 4 5 6 1 2 2
- 樣例輸出
-
1 3 1
#include<stdio.h> #include<algorithm> using namespace std; struct dian { int left; int right; } a[101]; int cmp(dian x,dian y)//將右邊按從小到大排序 { if(x.left!=y.left) return x.left<y.left; return x.right<y.right; } int main() { int n; while(scanf("%d",&n)!=EOF) { int i,j,ans=1; for(i=0; i<n; i++) scanf("%d%d",&a[i].left,&a[i].right); sort(a,a+n,cmp); for(i=n-1,j=n-2; j>=0;) { if(a[j].right<a[i].left)//如果右端點小於下一個的左端點,數目加一 { ans++; i=j;//將值賦給原來的點,重新進行比較 } j--; } printf("%d\n",ans); } return 0; }