貪心 區間貪心

2021-10-02 11:50:18 字數 913 閱讀 3521

給出n個開區間(x, y),從中選擇盡可能多的開區間,使得這些開區間兩兩沒有交集。

先對左端點 從大到小 排序,如果左端點相同就對右端點從小到大排序。

// 區間不相交問題

#include #include using namespace std;

const int maxn = 110;

// 區間結構體

struct intevali[maxn];

/*區間排序函式:

先對左端點 從大到小 排序

左端點相同的 從小到大 排序*/

bool cmp(inteval a, inteval b)

int main()

} // 對所有區間進行排序(先按 左端點 從大到小排序,再按 右端點 從小到大排序)

sort(i, i+n, cmp);

// ans 記錄不相交區間個數,lastx記錄上乙個被選中區間的 左端點

int ans = 1, lastx = i[0].x; // 預設第乙個區間被選中

for(int i = 1; i < n; i++) }

printf("%d\n", ans);

return 0;

}

給出 n 個閉區間 [x, y],求最少需要確定多少個點,才能使每個閉區間中都存在乙個點。

如果閉區間 i1被 i2 包含,那麼在 i1 中取點可以保證這個點一定在 i2內。把所有區間按左端點從大到小排序,只要取左端點,這樣這個點就能覆蓋到盡可能多的的區間。

(貪心)整數區間

題目 找到乙個含元素個數最少的集合,使得對於每乙個區間,都至少有乙個整數屬於該集合,輸出該集合的元素個數。輸入 首行包括區間的數目n,1 n 10000,接下來的n行,每行包括兩個整數a,b,被一空格隔開,0 a b 10000,它們是某乙個區間的開始值和結束值。輸出 第一行集合元素的個數,對於每乙...

區間貪心總結

一 線段覆蓋 n個開區間 ai,bi 選擇盡量多個區間,使得這些區間兩兩不相交 右端點排序 兼顧左端點 再從左到右遇到不相交的就選 sort he 1,he n 1,cmp int tot 0,now 1000 for int i 1 i n i printf d tot 二 區間選點 n個閉區間 ...

貪心 區間選擇

貪心 區間選擇 區間選擇大意 有n個區間,區間可以重疊,要求你選出最多的滿足要求的區間,要求這些區間彼此不能重疊 思路 首先,我們可以把總區間分成兩個部分 從中間某一點一批為二 左邊那部分為已定區域,右邊為待定區域 在已定區間已經得到最優解時,我們需要整體最優,明顯有這樣乙個策略 已定區域的末端點越...