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

2021-09-25 06:41:24 字數 1020 閱讀 8964

區間相交問題

description

給定x軸上n個閉區間。去掉盡可能少的閉區間,使剩下的閉區間都不相交。

給定n個閉區間,計算去掉的最少閉區間數。

input

輸入第一行是正整數n ( n < 100 ),表示閉區間數。接下來的n行中,每行有兩個整數(可以是負數),分別表示閉區間的兩個數端點。

output

輸出去掉的最少閉區間數

sample input

3

10 20

10 15

20 15

sample output

2
思路:

貪心思想,要想去掉最少區間數,意思就剩餘最多的區間;

把區間按照右端點從小到大的順序排列;//這樣全部區間中最遠的右端點就確定下來了,最小左端點也確定了,就可以看成乙個大區間,我們來處理了,我們按照該排序遍歷的時候,把與前乙個區間相交的區間去掉就行了,這樣就能「剩餘最多的區間」。

先讓 r = 第乙個區間的右端點;

從前往後遍歷所有區間,如果遇到區間的左端點小於 r ,則這個區間就要刪去;

如果遇到區間的左端點大於 r ,此區間保留,改變 r =此區間的右端點;

注意:輸入的每區間可能不是按照左端點、右端點的順序輸入的,必要時需要調換位置

參考於:

下面是**:

#includeusing namespace std;

struct nodeq[105];

bool operator < (struct node a,struct node b)

sort(q+1,q+n+1);

r=q[1].r ;

int count=0;

for(int i=2;i<=n;i++)

else

r=q[i].r ;

} printf("%d",count);

return 0;

}

選擇不相交區間(貪心)

數軸上有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...

貪心 選擇不相交區間問題

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