白書 區間排程問題

2021-10-03 14:36:17 字數 933 閱讀 1794

問題主題:區間排程問題

問題描述:

有n項工作,每項工作分別在si開始,ti結束。對每項工作,你都可以選擇參加或不參加,但選擇了參加某項工作就必須至始至終參加全程參與,即參與工作的時間段不能有重疊(即使開始的時間和結束的時間重疊都不行)。

限制條件:

1<=n<=100000

1<=si<=ti,=109

樣例:輸入

n=5s=

t=輸出

3(選擇工作1, 3, 5)

1 #include 2 #include 3

4using

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...