B 區間選點

2021-10-03 15:42:43 字數 1007 閱讀 3217

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

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

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

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

input:

21 5

4 6output:

1input:

31 3

2 54 6

output:

2

對於n個閉區間,要取盡可能少的點使每個區間都至少有乙個點,也就是說取的點要盡可能多的覆蓋區間(即取點盡可能的在多區間重合部分)。而對於乙個區間而言 如果它的右端點都和其他區間沒有交叉重疊,那麼該區間的點無法覆蓋下乙個區間。

所以這裡根據貪婪演算法我們不妨取點都取右端點,先利用sort排序,先按區間右端點公升序排序,右端點相同的情況下再按左端點降序排序。

然後利用佇列來遍歷n個區間,並更新當前已覆蓋區間,當某個區間的左端點比隊首的右端點還大時,說明與下乙個區間沒有重疊部分了,需要取乙個新的點來覆蓋該新的區間,否則繼續遍歷。

#include

#include

#include

using

namespace std;

const

int maxn=

1e3+5;

struct point

else}}

;queue q;

intmain()

sort

(node,node+n)

;//按右端點排序

B 區間選點

數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 input 第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 output 乙個整數,代表選點的數目examples input 2 1 54 6outp...

B 區間選點 貪心演算法

數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點,輸出選點的數目。樣例輸入輸出 定義乙個結構體表示區間,讀入資料後,進行多關鍵字排序 第一為右區間小的在前,第二為左區間大的在前 從開始選擇第乙個區間的右端點point,向後迴圈,若point在該區間內,則繼續迴圈,直...

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該題的貪心策略是 選取區間的最後乙個點...