貪心 區間覆蓋(題解)

2021-10-03 21:43:47 字數 926 閱讀 3853

題意:數軸上有 n (1<=n<=25000)個閉區間 [ai, bi],選擇盡量少的區間覆蓋一條指定線段 [1, t]( 1<=t<=1,000,000)。

覆蓋整點,即(1,2)+(3,4)可以覆蓋(1,4)。

不可能辦到輸出-1

思路:首先進行預處理,將不在區間[1, t]內的區間砍掉,然後按照左端點從小到大進行排序,當左端點相同時右端點從大到小排序,從起點開始選擇區間,然後繼續處理迴圈選擇

總結:貪心問題關鍵找到多個指標,確定按哪個指標處理更優。

反思:剛開始te,後來進行了優化,因為其實的區間是sort排好序的,所以可以在cover函式裡面加入判斷,預處理時不需要對所有預處理,而且每次都是選擇起始點的區間,所以當區間起始點大於sx時說明以後的區間也不可取,所以break

**:

#include

#include

#include

#include

using

namespace std;

int flag =0;

struct interval

}ter[

25002];

void

cover

(interval* ter,

int k,

int sx,

int ty)

if(ter[i]

.x >sx)

break;}

if(ok)

else

if(sx > ty)

cover

(ter, k, sx, ty);}

intmain()

sort

(ter, ter + k)

;cover

(ter, k,

1, t)

;return0;

}

區間覆蓋(貪心)

題目 區間覆蓋 貪心 題意 給定 n 個閉區間 ai,bi 以及乙個線段區間 s,t 請你選擇盡量少的區間,將指定線段區間完全覆蓋。輸出最少區間數,如果無法完全覆蓋則輸出 1。輸入格式 第一行包含兩個整數 s 和 t,表示給定線段區間的兩個端點。第二行包含整數 n,表示給定區間數。接下來 n 行,每...

貪心 區間覆蓋問題

區間覆蓋問題 time limit 1000ms memory limit 65536kb submit statistic discuss problem description 設x1 x2 xn 是實直線上的n 個點。用固定長度的閉區間覆蓋這n 個點,至少需要多少個這樣的固定長度閉區間?對於給...

區間覆蓋 AcWing 貪心

給定n個閉區間 ai,bi 以及乙個線段區間 s,t 請你選擇盡量少的區間,將指定線段區間完全覆蓋。輸出最少區間數,如果無法完全覆蓋則輸出 1。輸入格式 第一行包含兩個整數s和t,表示給定線段區間的兩個端點。第二行包含整數n,表示給定區間數。接下來n行,每行包含兩個整數ai,bi,表示乙個區間的兩個...