活动安排问题 (贪心)

点击打开链接



输入

第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;
}
恭喜!你的程序通过了所有的数据测试。 


刚开始不太明白结束时间与开始时间的比较问题,现在想明白后就有了一种醍醐灌顶的感觉生气











posted @ 2017-08-12 20:46  Veritas_des_Liberty  阅读(255)  评论(0编辑  收藏  举报