區間排程問題:
有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...