時間限制: 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不夠優雅的證明 qwqusing
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 }
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 思路 將輸入的區間按照左小右大交換,然後按照左區間從小到大排序,左區間一樣的,比較右區間,也按從小到大 然後從第乙個區間開始刪除後面的區間,如果後面的區間左區間大於前面的右區間,在比較前面的右區間和後面的右區間,如果前面的右區間大則刪除前面的那個區間,否則刪除後面的區間 ...