貪心演算法 區間合併以及覆蓋問題

2021-10-25 06:24:17 字數 1960 閱讀 8098

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策略分...