貪心--區間選點

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,沒想到過了,我也懵逼。
相關文章
相關標籤/搜索