week3 B 區間選點

2021-10-03 19:01:49 字數 1070 閱讀 7364

數軸上有 n 個閉區間 [a_i, b_i]。取盡量少的點,使得每個區間內都至少有乙個點(不同區間內含的點可以是同乙個)。

input

第一行1個整數n(n<=100)

第2~n+1行,每行兩個整數a,b(a,b<=100)

output

乙個整數,代表選點的數目

sample input

215

46

sample output
1
1.要完成這個題目,首先需要按照一定的順序來選點,不妨按照數軸上從左到右的順序依次選點。

2.接下來就是區間怎麼排序,區間有兩個端點,由於我們是從小到大依次選點,因此選取每個區間的結束點即右端點作為排序的第一關鍵字,右端點相同時再按照左端點排序。

3.區間排好序後,對於依次遍歷到的區間,我們應該選哪個點作為選點個數的判斷指標呢?這裡用到貪心演算法,總是選區間的右端點。我們可以證明該演算法的正確性。對於按照右端點排好序的區間來說,如果選取左端點,那麼以下情況端點a則不能覆蓋兩個有重合部分的區間,需要增加乙個點,這違背了」選取盡量少的點的原則「。因此,總是選擇區間的右端點。

4.規則確定下來後,開始選點,這裡用佇列實現。對於排在前面的區間,它的右端點與排在其後面的區間區間的左端點有兩種情況:右端點在左端點右邊或右端點在左端點左邊。第二種情況時,需要增加乙個點,同時把排在後面的那個區間加入佇列中。

#include

#include

#include

using

namespace std;

struct interval};

intmain()

sort

(_int,_int+n)

; q.

push

(_int[0]

);int num=1;

for(

int i=

1;icout<

return0;

}

week 3 B 區間選點

數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 乙個整數,代表選點的數目 21 5 4 63 1 32 5 4 6該題的貪心策略是 選取區間的最後乙個點...

week3 B 區間選點

數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 運用貪心的策略,選擇的點可以讓數量最多的區間將它包含,所以我們要求出各區間交集,當交集不為空時在交集處找...

Week3 B 區間選點 貪心演算法

題目大意 數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 同區間內含的點可以是同乙個 思路本題是一道貪心問題,解決問題的關鍵是尋找恰當的貪心的方法。這道題採用如下貪心方法 為什麼上述做法可以實現選點最少呢?在按照上述方法排序後,我們從左往右想。對於第乙個區間,其中...