贪心--区间选点

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

输入格式:

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

输出格式:

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

输入样例:

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

输出样例:

在这里给出相应的输出。例如:
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;
}

 

 

 
三、代码思路
先将区间按照右边界大小(即r[i])进行排序,寻找两个不同区间的相同集合,找到了计数器不用加一,找不到就将p移到另一区间的右边界,并且计数器加一
 
四、解题思路||感想
 
每次都去“贪心”去找有相同集合的区间,找不到将p移动
 
其实一开始由于我对动态规划,贪心算法不熟悉,我对这类题总会出现弱逻辑问题,这次也以为应该是错的,就碰巧提交到pta,没想到过了,我也懵逼。
posted @ 2019-11-01 14:46  20181002835  阅读(226)  评论(0编辑  收藏  举报