Codevs 1214 線段覆蓋

2022-02-27 11:20:30 字數 1305 閱讀 5183

時間限制: 1 s

空間限制: 128000 kb

題目等級 : ** gold

給定x軸上的n(0

輸入描述 input description

輸入第一行是乙個整數n。接下來有n行,每行有二個空格隔開的整數,表示一條線段的二個端點的座標。

輸出描述 output description

輸出第一行是乙個整數表示最多剩下的線段數。

樣例輸入 sample input

6  3

1  3

2  5

樣例輸出 sample output

資料範圍及提示 data size & hint

0分析 analysis

這道題需要證明貪心。

「易證,該題適用貪心策略」 qwq

我翻到的題解就是這麼跟我說的 qwq

「顯然,該題適用貪心策略」 qwq

橫批:缺少優雅 qwq

首先按公升序排序右端點,定義 last 為決策區間的起點(通常為已決策區間的最遠端點-1)

那麼從小到大遍歷右端點,第乙個滿足不重疊條件的線段即可新增

這個地方就需要證明貪心了,那麼根據我的想法:

右端點是層層推進的,那麼越早決策右端點,留給下一次決策的可決策區間就越大

(我們的決策區間其實就是最左端和最右端)

並且可以保證之前的決策不會影響到後面的決策

(也就是滿足最優子結構?歡迎指正)

還是覺得不夠優雅 qwq 歡迎路過的大牛解惑呀

** code

1 #include2 #include3 #include4

using

namespace

std;56

struct

edgee[10000];9

10bool cmp(const edge &a,const edge &b)

1314

intmain()

2425 sort(e+1,e+1+n,cmp);

2627

int last = 0,ans = 0;28

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

3132 printf("%d"

,ans);

3334

return0;

35 }

不夠優雅的證明 qwq

codeVS 1214 線段覆蓋

題目描述 description 給定x軸上的n 0輸入描述 input description 輸入第一行是乙個整數n。接下來有n行,每行有二個空格隔開的整數,表示一條線段的二個端點的座標。輸出描述 output description 輸出第一行是乙個整數表示最多剩下的線段數。樣例輸入 samp...

codevs1214 線段覆蓋

題目描述 description 給定x軸上的n 0 輸入描述 input description 輸入第一行是乙個整數n。接下來有n行,每行有二個空格隔開的整數,表示一條線段的二個端點的座標。輸出描述 output description 輸出第一行是乙個整數表示最多剩下的線段數。樣例輸入 sam...

codevs 1214 線段覆蓋(貪心)

題目 codevs1214 思路 將輸入的區間按照左小右大交換,然後按照左區間從小到大排序,左區間一樣的,比較右區間,也按從小到大 然後從第乙個區間開始刪除後面的區間,如果後面的區間左區間大於前面的右區間,在比較前面的右區間和後面的右區間,如果前面的右區間大則刪除前面的那個區間,否則刪除後面的區間 ...