区间贪心,N个开区间,尽可能多的区间,使他们没有交集

2020-01-31  本文已影响0人  km15

// 区间贪心——尽可能多的开区间.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
learn && wrong:
1、还是得那个图来看,首先,排序是关键,然后再是FOR循环,以第一个【0】为lastx,不断更新并且累加

#include <iostream>
#include <algorithm>
using namespace std;

const int maxn = 110;

struct invel {
    int x, y;
}I[maxn];

bool cmp(invel a, invel b) {
    if (a.x != b.x) return a.x > b.x;
    else return a.y < b.y;
}

int main()
{
    int n;
    while (scanf("%d", &n), n != 0) {
        for (int i = 0;i < n;++i) {
            scanf("%d %d", &I[i].x, &I[i].y);
        }
    

    sort(I, I + n, cmp); //把区间排序

    //ans记录不想区间的个数,lastx记录上个被选中区间的左端点
    int ans = 1,lastx = I[0].x;
    for (int i = 1;i < n;++i) {
        if (I[i].y < lastx) {  //如果该区间右断电在lastX左边
            lastx = I[i].x;  //以I[i]做为新选中的区间,不想交区间个数+1
            ans++;
        }
    }

    printf("%d\n", ans);
    }

    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读