1214線段覆蓋問題 貪心法

2021-09-25 14:02:09 字數 775 閱讀 4786

題目描述:

給定x軸上的n(0輸入描述:

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

輸出描述:

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

樣例輸入:

6  3

1  3

2  5

樣例輸出:

0貪心法:

該線段覆蓋問題其實本質上是貪心演算法裡面的最大不相交覆蓋問題。根據題意,我們需要最多的線段,所以對於每一條右端點相同的線段,選長度小的;至於為什麼要選右端點作公升序排列?我還不是特別能夠理解,最好就是列出具體的線段去比較左端點排列和右端點排列的區別。當使用右端點公升序時,你僅僅需要考慮前面那條線段(前者)的右端點是否比後面那條線段(後者)的左端點小即可,而使用左端點公升序時,則還需要考慮更多。似乎用貪心的最優子結構是可以解釋的,有大佬能解釋就幫忙解釋一下,謝謝。

#includeusing namespace std;

int main()

}//令線段按右端點公升序排列,使用氣泡排序

for(int i=0;iright[j+1])}}

//統計符合條件的線段數

int j=0,sum=1;

for(int i=1;i=right[j])

}cout

}

Codevs P1214 線段覆蓋 貪心

時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解 題目描述 description 給定x軸上的n 0 n 100 條線段,每個線段由它的二個端點a i和b i確定,i 1,2,n.這些座標都是區間 999,999 的整數。有些線段之間會相互交疊或覆蓋。請你編寫乙個程式,從給...

codevs 1214 線段覆蓋(貪心)

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

貪心 codevs1214 線段覆蓋

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