區間排程問題

2021-10-09 08:43:32 字數 406 閱讀 7281

題意:有n項工作,每項工作分別在si時間開始,在ti時間結束。對於每項工作,你都可以選擇參與與否。如果選擇了參與,那麼自始至終都必須全程參與。此外,參與工作的時間段不能重合。然後問你的目標是參與盡可能多的工作,那麼你最多能參與多少項工作?

思路:這種題目我們很容易想到貪心的方案,但問題的重點是我們該如何執行貪心。我們在可選的工作中,每次選擇結束時間最早的工作。

#includeusing namespace std;

const int maxn = 100000;

pairitv[maxn];

void solve()

sort(itv,itv+n);

int ans = 0,t = 0;

for(int i=0;icout<}

區間排程問題

有n項工作,每項工作分別在start i 時間開始,在end i 時間結束。對於每項工作,你都可以選擇參與與否,如果選擇參與,那麼自始至終必須全程參與。此外參與時間段不能重疊 即使是開始的瞬間與結束的瞬間重疊也是不允許的 那麼最多能參與多少項工作?演算法思想 在可選的工作中,每次都選取結束時間最早的...

區間排程問題

有n項工作,每項工作分別在start i 時間開始,在end i 時間結束。對於每項工作,你都可以選擇參與與否,如果選擇參與,那麼自始至終必須全程參與。此外參與時間段不能重疊 即使是開始的瞬間與結束的瞬間重疊也是不允許的 那麼最多能參與多少項工作?演算法思想 在可選的工作中,每次都選取結束時間最早的...

區間排程問題

我們要選擇結束時間最早的,這樣才能保證選的區間比較多,因此這個裡面會有對區間的排序,結束時間最早排在前面,運用了pair,pair中有兩個屬性就是first,second,把s存在了second中,把t存在了first中,這樣就可以把結束時間最早放在前面。include include includ...