贪心--区间选点

1、问题描述
数轴上有n个闭区间[ai, bi]。取尽可能少的点,使得每一个区间内都至少有一个点(不一样区间内含的点能够是同一个)。

输入格式:

第一行一个数字n,表示有n个闭区间。 下面n行,每行包含2个数字,表示闭区间[ai, bi]

输出格式:

一个整数,表示至少须要几个点

输入样例:

在这里给出一组输入。例如:
3
1 3
2 4
5 6

输出样例:

在这里给出相应的输出。例如:
2
 
2、代码
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int n;
    cin>>n;
    
    int l[n],r[n];
    for(int i = 0;i<n;i++)
    cin>>l[i]>>r[i];
    
    for(int i = 0;i<n-1;i++){//右边界排序
        int temp;
       for(int j = i+1;j<n;j++){
        if(r[i]>r[j]){
                 temp = r[i];
                r[i] = r[j];
                r[j] = temp;
                temp = l[i];
                l[i] = l[j];
                l[j] = temp;
            }
        }
    }
    int count = 1;
    int p  = r[0];
    for(int i = 1;i<n;i++){
        int flag = 0;
        if(p<l[i]){
            count++;
            p = r[i];
        }
    }
     cout<<count;
    
   return 0;
}

 

 

 
3、代码思路
先将区间按照右边界大小(即r[i])进行排序,寻找两个不一样区间的相同集合,找到了计数器不用加一,找不到就将p移到另外一区间的右边界,而且计数器加一
 
4、解题思路||感想
 
每次都去“贪心”去找有相同集合的区间,找不到将p移动
 
其实一开始因为我对动态规划,贪心算法不熟悉,我对这类题总会出现弱逻辑问题,此次也觉得应该是错的,就碰巧提交到pta,没想到过了,我也懵逼。
相关文章
相关标签/搜索