問題主題:區間排程問題
問題描述:
有n項工作,每項工作分別在si開始,ti結束。對每項工作,你都可以選擇參加或不參加,但選擇了參加某項工作就必須至始至終參加全程參與,即參與工作的時間段不能有重疊(即使開始的時間和結束的時間重疊都不行)。
限制條件:
1<=n<=100000
1<=si<=ti,=109
樣例:輸入
n=5s=
t=輸出
3(選擇工作1, 3, 5)
1 #include 2 #include 34using
namespace
std;56
const
int max_n = 1e5 + 3;7
8int
n,s[max_n],t[max_n];
910 pairitv[max_n];
1112
void
solve()
1322 sort(itv,itv+n);
2324
for(int i=0;ii)
2528
29int ans=0,t=0;30
for(int i=0;ii)
3141}42
//cout<43 printf("
%d\n
",ans);44}
4546
intmain()
4753
for(int i=0;ii)
5457
solve();
58return0;
59}6061
/*62563
1 2 4 6 8
643 5 7 9 10657
661 2 1 2 4 6 8
674 3 3 5 7 9 10
68*/
區間排程問題
有n項工作,每項工作分別在start i 時間開始,在end i 時間結束。對於每項工作,你都可以選擇參與與否,如果選擇參與,那麼自始至終必須全程參與。此外參與時間段不能重疊 即使是開始的瞬間與結束的瞬間重疊也是不允許的 那麼最多能參與多少項工作?演算法思想 在可選的工作中,每次都選取結束時間最早的...
區間排程問題
有n項工作,每項工作分別在start i 時間開始,在end i 時間結束。對於每項工作,你都可以選擇參與與否,如果選擇參與,那麼自始至終必須全程參與。此外參與時間段不能重疊 即使是開始的瞬間與結束的瞬間重疊也是不允許的 那麼最多能參與多少項工作?演算法思想 在可選的工作中,每次都選取結束時間最早的...
區間排程問題
我們要選擇結束時間最早的,這樣才能保證選的區間比較多,因此這個裡面會有對區間的排序,結束時間最早排在前面,運用了pair,pair中有兩個屬性就是first,second,把s存在了second中,把t存在了first中,這樣就可以把結束時間最早放在前面。include include includ...