這個區間貪心問題,是要按照區間左端點排序。
和之前區間問題一樣,我們需要分情況討論貪心決策
1.如果乙個區間的左端點比當前每乙個組的最右端點都要小,那麼意味著要開乙個新區間了,這個條件還可以優化成,乙個區間左端點比最小組的右端點都要小就開乙個新組。
2.如果乙個區間的左端點比最小組的右端點大,那麼就放在該組,這其實也是乙個貪心,因為是先考慮最容易放入乙個區間的組嘛
這道題對於資料結構上的選擇也要考慮,用乙個小頂堆,也就是優先佇列來儲存每乙個組的最右端點是最好的資料結構了。
步驟1.按區間左端點排序
2.掃瞄所有區間,按以上情況分開處理
3.最後堆中存的所有資料的個數就是組的個數
#include
#include
#include
#include
using
namespace std;
const
int n=
1e5+5;
struct range
}ranges[n]
;int
main()
sort
(ranges,ranges+n)
; priority_queue<
int, vector<
int>
, greater<
int>> heap;
for(
int i=
0;icout << heap.
size()
;}
Acwing 906 區間分組
906.區間分組 給定n個閉區間 ai,bi 請你將這些區間分成若干組,使得每組內部的區間兩兩之間 包括端點 沒有交集,並使得組數盡可能小。輸出最小組數。輸入格式 第一行包含整數n,表示區間數。接下來n行,每行包含兩個整數ai,bi,表示乙個區間的兩個端點。輸出格式 輸出乙個整數,表示最小組數。資料...
AcWing 906 區間分組
目錄貪心演算法求解 新的思路 參考文章 給定 n 個閉區間 ai,bi 請你將這些區間分成若干組,使得每組內部的區間兩兩之間 包括端點 沒有交集,並使得組數盡可能小。輸出最小組數。輸入格式 第一行包含整數 n,表示區間數。接下來 n 行,每行包含兩個整數 ai,bi,表示乙個區間的兩個端點。輸出格式...
Acwing 905 區間選點
給定n個閉區間 ai,bi 請你在數軸上選擇盡量少的點,使得每個區間內至少包含乙個選出的點。輸出選擇的點的最小數量。位於區間端點上的點也算作區間內。輸入格式 第一行包含整數n,表示區間數。接下來n行,每行包含兩個整數ai,bi 表示乙個區間的兩個端點。輸出格式 輸出乙個整數,表示所需的點的最小數量。...