貪心策略 活動安排 會場安排

2021-06-27 00:25:27 字數 984 閱讀 2857

會場安排問題: 假設要用很多個教室對一組活動進行排程。我們希望使用盡可能少的教室來排程所有的活動。請給出乙個有效的貪心演算法,來確定哪乙個活動應使用哪乙個教室。

(這個問題也被成為區間圖著色(interval-graph coloring)問題。我們可作出乙個區間圖,其頂點為已知的活動,其邊連線著不相容的活動。為使任兩個相鄰結點的顏色均不相同,所需的最少顏色對應於找出排程給定的所有活動所需的最少教室數。)

分析:先找出合適的貪心策略,活動按結束時間進行從小到大排序,在保證相容的情況下,先進入會場的活動結束時間越早越好。依次先從結束時間早的分配會場,沒有相容的會場則開闢新的會場,不要忘記,開闢會場sumroom+1,每個活動都要遍歷所有的會場。使用 貪心策略,只遍歷一次所有活動就行。

關鍵在於:找到合適的貪心策略,因為貪心簡化了動規的子問題,但是不是所有的貪心都能得到正確的答案。

/**   貪心演算法,解決活動選擇問題。。

* 也是一種動規,只是他將不符合條件的子問題都捨棄了

* 這裡 活動已經 按結束時間排好序

* @param s:活動的開始時間 採用遞迴的方法時,要加入乙個虛擬活動a0

* @param f:活動的結束時間

* @param k n:活動的規模

*/public void recursiveactivityselect(int s,int f,int k,int n) }

/*按最晚開始時間進行貪心演算法,首先引數為乙個按照開始時間拍好的序的活動

*開始時間從大到小排序

*/public void recursiveactivityselect2(int s,int f,int k,int n)

{ int m=k+1;

while(m<=n&&s[k]

總結:上述兩種問題: 先前的排序很重要,最早結束時間,優先選擇最早結束時間的活多不能夠,使相容的子串行最多,使用的會場最少。會場安排其實就是

貪心策略 會場安排問題

假設要在足夠多的會場裡安排一批活動,並希望使用盡可能少的會場。設計乙個有效的貪心演算法來進行安排。試程式設計實現對於給定的 k 個待安排活動,計算使用的最少會場。輸入資料中,第一行是 k 的值,接下來的 k 行中,每行有 2 個正整數,分別表示 k 個待安排活動的開始時間和結束時間,時間以 0 點開...

活動安排(貪心)

設有n個活動的集合e 其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。每個活動i都有乙個要求使用該資源的起始時間si和乙個結束時間fi,且si輸入 第一行乙個整數n 1 n 1000 接下來的n行,每行兩個整數si和fi。輸出輸出互相相容的最大活動個數。樣例輸...

活動安排 (貪心)

題目出處 像這種已知各活動的起止時間,求能參加活動 相容 的最大個數的問題,關鍵在於各活動的結束時間,依照結束時間將各活動 從小到大 排序,這樣當乙個活動結束時,可以立刻找出起始時間與這個活動結束時間間隔最小 或為0 且持續時間最短的活動,重複這個過程知道所有活動都已遍歷。附 include inc...