區間排程問題 貪心演算法

2021-10-05 04:14:40 字數 1438 閱讀 3920

一、題目

區間排程問題:

有n項工作,每項工作分別在si時間開始,在ti時間結束。對於每項工作,你都可以選擇參與與否。如果選擇了參與,

那麼自始至終都必須全程參與。此外,參與工作的時間段不能重複(即使是開始的瞬間和結束的瞬間的重疊也是不允許的)。

你的目標是參與盡可能多的工作,那麼最多能參與多少項工作呢?

1 ≤ n ≤ 100000

1 ≤ si ≤ ti ≤ 10^9

輸入:第一行: n

第二行: n個整數空格隔開,代表n個工作的開始時間

第三行: n個整數空格隔開,代表n個工作的結束時間

樣例輸入:

51 2 4 6 8

3 5 7 9 10

樣例輸出:

3二、思路及其**實現

思想:貪心演算法

貪心策略:每次選擇結束時間最早的活動。

/**

* 計算安排工作的數量

* @param works 工作物件陣列

* @return 最大安排數量

*/private

static

intarrange

(work[

] works)

}return number;

}

封裝work物件:

/**

* 構建靜態內部類:work

* 實現comparable類,

* 重寫compareto方法——結束時間t:第一排序字段;開始時間s:第二排序字段。

*/private

static

class

work

implements

comparable

@override

public

intcompareto

(work another)

}

main方法:

public

static

void

main

(string[

] args)

for(

int i =

0; i < n; i++

)for

(int i =

0; i < n; i++

)// 重寫了work的比較方法,因此可實現優先結束時間排序,次優開始時間排序。

arrays.

sort

(works)

; system.out.

println

(arrange

(works));

}

區間排程問題 貪心演算法

問題 有 n 項工作,每項工作分別在 s i 時間開始,在 t i 時間結束 對於每項 工作,你都有可以選擇參與與否。如果選擇了參與,那麼自始自終都必須全程參與。此外,參與工作的時間段不能重疊 即使是開始的瞬間和結束的瞬間的重疊也 是不允許的 include include include usin...

區間排程 貪心演算法

一 找到數目盡可能多的相容任務 假設每個任務j從sj開始到fj結束。若要找到盡可能多的相容任務,只需要將所有任務按照結束時間排序,每次都選擇最早結束的那個任務。因為每次選最早結束的,則留給之後的時間就越多。在餘下的時間中與被選的那個任務衝突的任務最多也只能有乙個被選 代替現在被選的這個任務 但是留下...

貪心演算法 區間排程問題總結

問題定義 存在單一資源,有一組以時間區間形式表示的資源請求reqs 第i個請求希望占用資源一段時間來完成某些任務,這段時間開始於begin i 終止於end i 如果兩個請求req i和req j在時間區間上沒有重疊,則說這兩個請求是相容的,求出這組請求的最大相容子集 最優子集 舉個例子 有一間多 ...