贪心算——线段

题目描述

数轴上有 n 条线段,选取其中 k 条线段使得这 k 条线段两两没有重合部分,问 k 最大为多少。

输入格式

第一行为一个正整数 n;

在接下来的 n 行中,每行有 2 个数 ai,bi,描述每条线段。

输出格式

输出一个整数,为 k 的最大值。

样例输入

3
0 2
2 4
1 3

样例输出

2
题解
就是一个活动安排问题,但要注意时间问题,用冒泡排序的话很容易超时,以后就用c++的快排吧。

#include<stdio.h>
#include<algorithm>
using namespace std;
struct xd{
    int b;
    int c;
}a[1000000];
bool cmp(xd x,xd y)
{
    return x.c<y.c;
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d %d",&a[i].b,&a[i].c);
    sort(a,a+n,cmp);
    int ans=1;
    int m=a[0].c;
    for(int i=1;i<n;i++)
        if(m<=a[i].b)
    {
        m=a[i].c;
        ans++;
    }
    printf("%d\n",ans);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43328040/article/details/85221393
今日推荐