貪心 區間選擇

2021-08-28 04:19:48 字數 769 閱讀 2586

#貪心 區間選擇

區間選擇大意:有n個區間,區間可以重疊,要求你選出最多的滿足要求的區間,要求這些區間彼此不能重疊

###思路

首先,我們可以把總區間分成兩個部分(從中間某一點一批為二),左邊那部分為已定區域,右邊為待定區域

在已定區間已經得到最優解時,我們需要整體最優,明顯有這樣乙個策略:

已定區域的末端點越靠左,則待定區間越大,待定區間可供選區的區間也可能越多

可以這麼想,首先總區間是一定的,所以已定區域的末端點越靠左,也就代表已定區域越小,則待定區域越大

所以我們在選擇區間時,盡量選擇能讓已定區域末端點增長最少的那個區間,反之,如果我們選擇了讓已定區域末端點增長更大的區間,則選擇和增長最少區間相同:ans + 1、、、但是,後方可供選擇的區間可能會更少。

當然,也可能出現兩個區間的末端點相同,這種情況其實選擇哪乙個區間都沒問題。首先因為這兩個區間都在待定區域中,與之前選擇的區間不會衝突,其次二者的末端相同,也就是說都能讓已定區域末端點增長最少,所以對後面的選擇並無影響,所以選擇哪個都可以。

**:

#include

#include

using

namespace std;

struct nd

}arr [

100005];

int n;

intmain()

} cout << ans << endl;

return

;}

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

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

選擇不相交區間(貪心)

數軸上有n個區間 ai,bi 要求選擇盡量多個區間,使得這些區間兩兩沒有公共點。貪心策略 按照b1 b2 b3 的方式排序,然後從前向後遍歷,每當遇到可以加入集合的區間,就把它加入集合。集合代表解的集合 證明 我們對a1,a2 的關係分以下幾種情況考慮 1 a1 a2。此時區間2包含區間1。這種情況...

NYOJ 選擇不相交區間 貪心

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