區間排程問題

2021-10-02 19:16:59 字數 709 閱讀 8075

區間排程問題:

有n項工作,每項工作分別在si時間開始,在ti時間結束。對於每項工作,你都可以選擇參與與否。如果選擇了參與,那麼自始至終都必須全程參與。此外,參與工作的時間段不能重疊(即使是開始的瞬間和結束的瞬間的重疊也是不允許的)。你的目標是參與盡可能多的工作,那麼最多能參與多少項工作呢?

輸入格式:

nn項工作的開始時間陣列s

n項工作的結束時間陣列t

輸出格式:

參加工作的個數

輸入

51 2 4 6 8

3 5 7 9 10

輸出

3

#include#include#includeusing namespace std;

const int maxn = 1000000;

int n;

int s[maxn];

int t[maxn];

pairp[maxn];

int main()

for(int i = 0; i>t[i];

}for(int i = 0; isort(p, p+n);

int res = 1;

int end = t[0];

for(int i = 1; icout<}

區間排程問題

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

區間排程問題

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

區間排程問題

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