1.當前區間的左端點比最小組右端點小,說明兩區間有交集,就要開乙個新的組。
2. 當前區間的左端點比最小組右端點大,說明兩區間沒有交集,因此放入該組,並且將該組的右端點更新成加入區間的右端點。
;}//這裡將所有區間按左端點從小到大排序
sort
( range , range + n )
;//這裡建立乙個小根堆,小根堆的最頂部是最小的數,由小到大依次往下
將所有區間按照左端點從小到大進行排序
從前往後列舉每個區間,在所有能覆蓋start的區間中,選擇右端點的最大區間,然後將start更新成右端點的最大值
#include
using
namespace std;
const
int n =
100010
;int n;
struct range
}range[n]
;int
main()
;}sort
(range , range + n)
;int res =0;
bool success =
false
;for
(int i =
0; i < n ; i++
)//這裡判斷如果選出的最長區間的右端點還是比st小,證明無法包含目標區間的左端點部分
if( r < st )
//經過上面判斷,證明了區間左端點比st小並且包含st,於是把這個區間加入進去
res++
;//這裡判斷當區間已經包含了ed,證明了已經覆蓋了目標區間
if( r >= ed )
//當還沒覆蓋目標區間,此時將r(最後乙個區間的右端點)賦值給st
st = r;
//這裡是從第j - 1 個開始遍歷,因為最後進行了j++,所以要減回去
貪心演算法 區間覆蓋
數軸上有 n 1 n 25000 個閉區間 ai,bi 選擇盡量少的區間覆蓋一條指定線段 1,t 1 t 1,000,000 覆蓋整點,即 1,2 3,4 可以覆蓋 1,4 不可能辦到輸出 1。第一行 n和t 第二行至n 1行 每一行乙個閉區間。輸出選擇的區間的數目,不可能辦到輸出 1 input ...
C 區間覆蓋 貪心演算法
數軸上有 n個閉區間 ai,bi 選擇盡量少的區間覆蓋一條指定線段 1,t 不可能辦到輸出 1。定義乙個結構體代表區間,在讀入資料後,對資料進行多關鍵字排序 第一是左端點小的在前,第二是右端點大的在前 對資料進行過濾,左端點相同的區間只保留區間長度最大的,如果當前區間被之前保留的區間完全包含則去掉。...
貪心演算法 區間問題
區間選單個點 問題描述 數軸上有n個閉區間 ai,bi 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 輸入 第1行 乙個整數n 接下來n行,每行2個整數ai,bi 輸出 乙個整數,表示滿足條件的最少點數。樣例輸入 5 4 62 3 1 46 8 5 7 樣例輸出 2策略分...