week3 B 區間選點

2021-10-03 20:14:48 字數 1028 閱讀 6062

數軸上有 n 個閉區間 [a_i, b_i]。取盡量少的點,使得每個區間內都至少有乙個點(不同區間內含的點可以是同乙個)

第一行1個整數n(n<=100)

第2~n+1行,每行兩個整數a,b(a,b<=100)

運用貪心的策略,選擇的點可以讓數量最多的區間將它包含,所以我們要求出各區間交集,當交集不為空時在交集處找到乙個點就可以保證這些區間內都有乙個點

求區間的交集,將區間按照右端點right公升序排序,(若右端點right相同則按照left降序排序,這樣保證如果有右端點right相同的區間,排在最前面的區間就是這些區間的最小交集)設定乙個值duandian來標記當前區間的右端點,遍歷排序好的區間陣列,如果乙個新的區間的左端點left大於duandian則說明區間無交集,需要增加乙個點,然後更新duandian

區間選點用貪心策略來做,需要選擇好貪心的準則,貪心不考慮最後的結果怎麼樣,它每一次都會選擇設定好的最優的方案來處理當前的情況,對應這個題目就是每一次加點,這個點能被最多的區間包含,所以我們每一次加點都需要找出最小的交集。

#include

#include

using namespace std;

int n,ans;

struct qvjian

qvjian()

bool operator <

(qvjian &b)};

intmain()

sort

(test,test+n)

; duandian = test[0]

.right;

ans =1;

for(

int i =

1; i < n; i++)}

cout<}return0;

}

week 3 B 區間選點

數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 乙個整數,代表選點的數目 21 5 4 63 1 32 5 4 6該題的貪心策略是 選取區間的最後乙個點...

week3 B 區間選點

數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 input 第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 output 乙個整數,代表選點的數目 sample input 215 46sample ...

Week3 B 區間選點 貪心演算法

題目大意 數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 同區間內含的點可以是同乙個 思路本題是一道貪心問題,解決問題的關鍵是尋找恰當的貪心的方法。這道題採用如下貪心方法 為什麼上述做法可以實現選點最少呢?在按照上述方法排序後,我們從左往右想。對於第乙個區間,其中...