洛谷 P1803 線段覆蓋 C語言

2021-10-02 16:15:42 字數 1167 閱讀 2146

附上**

#include

typedef

struct

game;

void

quicksort

(game a,

int s,

int e)

;//快排

intmain()

quicksort

(a,0

,n -1)

;//排序,按照結束的時間排序,結束時間早的排在前面

int result =0;

int i =1;

int last = a[0]

.e_time;

//結束時間最早的賦給last

while

(i < n)

printf

("%d"

,result)

;return0;

}void

quicksort

(game a,

int s,

int e)

quicksort

(a,s,i -1)

;quicksort

(a,i +

1,e);}

}

刪除線格式

這道貪心題主要在於如何將陣列排序才能使其參加盡量多的比賽。

所以我們每回選擇的物件都應該是對後續影響最小的,結束時間最早的比賽對後面的影響最小,在結束時間相同的情況下,哪場比賽持續的時間短,哪場比賽就對我們有利,就應該排在前面

所以在排序的時候,要考慮兩個因素,根據結束的時間和持續的時間進行排序。

定義last為最早的結束時間,在迴圈中向後找,直到找到一場比賽的開始時間大於等於last,就可以參加這場比賽,result + 1,然後把last更新為當下的比賽的結束時間,繼續迴圈重複上述過程。

本題的突破點在於排序的方式,如果能想到按結束時間排序,就不難寫出程式。ac也不再困難。

排序時要使用快排或者歸併,c++自帶sort和python自帶的sorted都可以滿足時間的要求,時間複雜度為o(n2)的排序會超時。

刪除線格式

溜了溜了~~

洛谷P1803 線段覆蓋(貪心)

題目大意 有n個線段,問最多能放多少個不重疊的線段。解題思路 右端點從小到大排序,我們每次盡可能地放右端點小的線段,能放就放 即不重疊 就可以了,為什麼這樣可行呢?因為右端點比較小更可能留有位置放其它區間。廢話 好久沒做貪心題了,這種區間題應該能反應過來需要考慮左,右或者區間長度這三個資訊,然後再構...

洛谷 P1803 凌亂的yyy 線段覆蓋

話說個人覺得前面的幾篇並不是很好,其實沒有那麼難,也沒有那麼長 很久以前就看到了,但貌似一直認為自己的演算法是錯誤的,結果交上去發現是正解 首先按照時間排序 貪心 結束時間早 盡可能不影響後面的比賽 的在前,若結束時間相同,則開始時間晚 盡可能不影響前面的比賽 的在前。如果兩者的判斷順序反了,就把最...

洛谷 P1803 凌亂的yyy 線段覆蓋

快 noip 了,yyy 很緊張!現在各大 oj 上有 n 個比賽,每個比賽的開始 結束的時間點是知道的。y 認為,參加越多的比賽,noip 就能考的越好 假的 所以,他想知道他最多能參加幾個比賽。由於 y 是蒟蒻,如果要參加乙個比賽必須善始善終,而且不能同時參加 2 個及以上的比賽。第一行是乙個整...