會場安排問題
問題描述:假設要在足夠多的會場裡安排一批活動,活動的開始時間和結束時間已知,並希望使用盡可能少的會場。設計乙個有效的演算法進行安排。
分析:這個問題實際上是著名的圖著色問題。若將每乙個活動作為圖的乙個頂點,不相容活動間用邊相連。使相鄰頂點著有不同顏色的最小著色數,就對應要找的最小會場數。 圖的最少著色問題,至今沒有有效的演算法,但這個問題和圖的著色問題有不同,活動的時間區間之間的約束關係轉化得到的圖,屬於區間圖。我們可以用貪心策略來解決。
分析解答:
(1)n個活動開始和結束時間分別是s[i]和f[i],s[i](2)把n個活動時間看做直線上n個區間,把所有的s[i]和f[i]按大小排序,得到乙個2n的有序陣列。count用於統計會場數,遍歷陣列,統計區間的最大的重疊數目。遇到s[i],一種活動進棧(相當於要安排乙個會場),count數加1,比較當前的會場使用數是否是最大。遇到f[i],一種活動出棧(相當於乙個會場用完,可以作為其他活動用),count數減1,直到把所有的活動都安排好,結束遍歷。
由於我們只要得到最少的會場數,遍歷陣列時,遇到乙個s[i],就把當前的count數加1,遇到對應的f[i]時,就把當前的count數減1,同時記錄每次迴圈時最大的count數,迴圈結束時,最大的count數就是我們需要的最少顏色數。這個演算法的時間複雜度主要是由排序所影響,複雜度為o(n*logn)。
//timepoint陣列就是所有的s[i]和f[i]按大小排序的結果
int countusing = 0;
int maxcount = 0;
for(int i = 0; i < 2*n; ++i)
else
-- countusing;
}
會場安排問題
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 學校的小禮堂每天都會有許多活動,有時間這些活動的計畫時間會發生衝突,需要選擇出一些活動進行舉辦。小劉的工作就是安排學校小禮堂的活動,每個時間最多安排乙個活動。現在小劉有一些活動計畫的時間表,他想盡可能的安排更多的活動,請問他該如...
會場安排問題
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 學校的小禮堂每天都會有許多活動,有時間這些活動的計畫時間會發生衝突,需要選擇出一些活動進行舉辦。小劉的工作就是安排學校小禮堂的活動,每個時間最多安排乙個活動。現在小劉有一些活動計畫的時間表,他想盡可能的安排更多的活動,請問他該如...
會場安排問題
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 學校的小禮堂每天都會有許多活動,有時間這些活動的計畫時間會發生衝突,需要選擇出一些活動進行舉辦。小劉的工作就是安排學校小禮堂的活動,每個時間最多安排乙個活動。現在小劉有一些活動計畫的時間表,他想盡可能的安排更多的活動,請問他該如...