給出n個閉區間段,要求選擇盡可能少的區間,來完全覆蓋一條指定線段,僅考慮覆蓋整數點。
第一行:n(1<=n<=25000)和t(1<=t<=1,000,000)
第二行至n+1行: 每一行乙個閉區間。
輸出選擇的區間個數,若不可能則輸出-1。
貪心策略,選擇區間的左端點作為貪心指標,在按照如下的策略進行選擇:
#include
#include
using
namespace std;
struct section};
section p[
25000];
intmain()
sort
(p,p+n)
;//最小的區間起點大於1,不可能有解
if(p[0]
.a>1)
s=-1
;else
while
(p[i+1]
.a<=end+1)
} start=a;
end=b;
s++;}
//到結束,區間依然沒有到達t,則無解
if(ends=-1
;}printf
("%d\n"
,s);
return0;
}
本題也是一道純貪心的題目,重點還是在於貪心指標的選擇上,與區間選點題目不同的是,這道題選擇的區間的左端點,同時還需要對資料進行預處理,剪除那些無關的情況,來簡化策略的選擇過程。除此之外,要充分考慮到整數覆蓋的問題,因此判斷兩個區間相鄰的情況時,並不是b1等於a2,而是b1+1=a2,基於這種情況,在選擇時要充分考慮區間的範圍,從而可以盡量少的選擇區間來覆蓋更長的長度。 week3 C 區間覆蓋(不支援C 11)
數軸上有 n 1 n 25000 個閉區間 ai,bi 選擇盡量少的區間覆蓋一條指定線段 1,t 1 t 1,000,000 覆蓋整點,即 1,2 3,4 可以覆蓋 1,4 不可能辦到輸出 1 input 第一行 n和t 第二行至n 1行 每一行乙個閉區間。output 選擇的區間的數目,不可能辦到...
區間覆蓋(week3 作業C)
描述 數軸上有 n 個閉區間 ai,bi 選擇盡量少的區間覆蓋一條指定線段 1,t 不可能辦到輸出 1 輸入 注意,輸入包含多組測試資料,請處理到檔案結束 第一行 n和 第二行至n 1行 每一行乙個閉區間。輸出 選擇的區間的數目,不可能辦到輸出 1 樣例輸入 3 10 1 73 6 6 10 樣例輸...
week3作業 C 區間覆蓋
描述 數軸上有 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...