選擇不相交區間(貪心)

2021-06-06 05:37:12 字數 820 閱讀 1084

數軸上有n個區間[ai,bi],要求選擇盡量多個區間,使得這些區間兩兩沒有公共點。

貪心策略:

按照b1<=b2<=b3…的方式排序,然後從前向後遍歷,每當遇到可以加入集合的區間,就把它加入集合。(集合代表解的集合)

證明:我們對a1,a2……的關係分以下幾種情況考慮:

1、a1>a2。   此時區間2包含區間1。這種情況下顯然不會選擇區間2,因為選擇區間1會留下更多的剩餘空間。

不僅區間2如此,以後所有區間中只要有乙個 i 滿足a1 > ai,i 都不要選。

即此種情況下,選擇區間1是明智的,與策略一致。

2、排除情況1後,一定有a1<=a2<=a3……。

在此條件下,如圖所示,不論區間1、2的相對位置如何,選擇區間1都會為以後的選擇留下更大的剩餘空間。

從而在此種情況下, 因此選擇區間1也是明智的,與策略一致。

經典例題:活動安排問題->

附**。

#include #include using namespace std;

struct extent

}a[10002];

int main()

{ int z,n,cnt,end;

scanf("%d",&z);

while(z--)

{cnt = 0;

end = -1;

scanf("%d",&n);

for(int i=0;i

區間貪心之選擇不相交區間

區間相交問題 description 給定x軸上n個閉區間。去掉盡可能少的閉區間,使剩下的閉區間都不相交。給定n個閉區間,計算去掉的最少閉區間數。input 輸入第一行是正整數n n 100 表示閉區間數。接下來的n行中,每行有兩個整數 可以是負數 分別表示閉區間的兩個數端點。output 輸出去掉...

NYOJ 選擇不相交區間 貪心

那麼,對於該問題。就是給一系列的區間,求最多的區間,要求區間個數最多,這些區間不相交,需要注意的是這些區間都是閉區間。第一行乙個數n為區間個數 n 1000 接下來有n行,每行有兩個數a,b分別為區間的兩個端點,a,b在int範圍。eof結尾。輸出如樣例所示。2 1 10 10 11 31 10 1...

貪心 選擇不相交區間問題

1.p1803 凌亂的yyy 線段覆蓋 題目描述 現在各大 oj 上有 n 個比賽,每個比賽的開始 結束的時間點是知道的。yyy 認為,參加越多的比賽,noip 就能考的越好 假的 所以,他想知道他最多能參加幾個比賽。由於 yyy 是蒟蒻,如果要參加乙個比賽必須善始善終,而且不能同時參加 2 個及以...