天天看點

活動選擇

<b> </b>學校在最近幾天有n個活動,這些活動都需要使用學校的大禮堂,在同一時間,禮堂隻能被一個活動使。由于有些活動時間上有沖突,學校辦公室人員隻好讓一些活動放棄使用禮堂而使用其他教室。   

現在給出n個活動使用禮堂的起始時間begini和結束時間endi(begini &lt; endi),請你幫助辦公室人員安排一些活動來使用禮堂,要求安排的活動盡量多。

【輸入】 第一行一個整數n(n&lt;=1000);  

接下來的n行,每行兩個整數,第一個begini,第二個是endi(begini&lt; endi &lt;=32767)

【輸出】 輸出最多能安排的活動個數。

【樣例輸入】

  11

  3 5

  1 4

  12 14

  8 12

  0 6

  8 11

  6 10

  5 7

  3 8

  5 9

  2 13

【樣例輸出】

   4

分析:

• 算法模型:給n個開區間(begini,endi), 選擇盡量多的區間, 使得兩兩不交。

• 做法: 首先按照end1&lt;=end2&lt;…&lt;=endn的順序排序,依次考慮各個活動, 如果沒有和已經選擇的活動沖突, 就選; 否則就不選。

• 正确性: 如果不選end1, 假設第一個選擇的是endi,則如果endi和end1不交叉則多選一個end1更劃算; 如果交叉則把endi換成end1不影響後續選擇。