題意:數軸上有 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,表示乙個區間的兩個...