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