數軸上有 n 個閉區間 [a_i, b_i]。取盡量少的點,使得每個區間內都至少有乙個點(不同區間內含的點可以是同乙個)。
input
第一行1個整數n(n<=100)
第2~n+1行,每行兩個整數a,b(a,b<=100)
output
乙個整數,代表選點的數目
sample input
215
46
sample output1
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 取盡量少的點,使得每個區間內都至少有乙個點 同區間內含的點可以是同乙個 思路本題是一道貪心問題,解決問題的關鍵是尋找恰當的貪心的方法。這道題採用如下貪心方法 為什麼上述做法可以實現選點最少呢?在按照上述方法排序後,我們從左往右想。對於第乙個區間,其中...