1. 程式人生 > >C語言貪心演算法之找點

C語言貪心演算法之找點

找點

時間限制: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;
}