活動安排問題 (貪心)

點擊打開鏈接



輸入

第1行:1個數N,線段的數量(2 <= N <= 10000)
第2 - N + 1行:每行2個數,線段的起點和終點(-10^9 <= S,E <= 10^9)

輸出

輸出最多可以選擇的線段數量。

輸入示例

3
1 5
2 3
3 6

輸出示例

2

請選取你熟悉的語言,並在下面的代碼框中完成你的程序,注意數據範圍,最終結果會造成Int32溢出,這樣會輸出錯誤的答案。
不同語言如何處理輸入輸出,請查看下面的語言說明。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<queue>
#include<algorithm>
#include<math.h>
using namespace std;
struct node
{
    int begin;
    int end;
}Num[100009];
bool cmp1(node a, node b)
{
    return a.end < b.end ;      //
}
int main()
{
    int n;
    int k=1;
    int count=1;
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
    {
        scanf("%d %d", &Num[i].begin , &Num[i].end );       
    }
    sort(Num+1, Num+n+1, cmp1);
    for(int i=2; i<=n; i++)
    {
        if(Num[i].begin >= Num[1].end)
        {
            Num[1].end = Num[i].end ; 
            count++;            
        }       
    }
        printf("%d\n",count);
    return 0;
}
恭喜!你的程序通過了所有的數據測試。 


剛開始不太明白結束時間與開始時間的比較問題,現在想明白後就有了一種醍醐灌頂的感覺生氣











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章