會場安排問題

2021-07-11 14:39:40 字數 1324 閱讀 9151

問題描述

假設要在足夠多的會場裡安排一批活動,並希望使用盡可能少的會場.設計乙個有效的貪心演算法進行安排(這個問題實際上是著名的圖著色問題,若將每乙個活動作為圖的乙個頂點,不相容活動間用邊相連,使相鄰頂點著有不同顏色的最小著色數,相應於要找的最小會場數) .

演算法思想

把所有活動的開始時間和結束時間按從小到大的順序排列,依次遍歷,當遇到開始時間時,count++,當遇到結束時間時,count–,最後,count的最大值就是安排這些活動所需要的最小會場數.

ps(說一下我的理解):當遇到開始時間時,為其分配乙個會場舉行活動,因為開始的時間一定比結束的時間早,當我遇到乙個結束時間時,說明這個活動已經結束,這個會場現在已經空閒,count–,我可以用這個會場去安排別的活動,所以,count的最大值就是我所需的安排這些所有活動所需要的最小的會場數.

**如下:

#include 

#include

#include

using

namespace

std;

struct time

;int greedy(vector

x)); //混排

for(int i=0;i1;i++)

}return max;

}int main()

cout

0;}

問題描述如上.

* 首先,選擇乙個會場,遍歷所有的活動,把能放在乙個會場的活動放在乙個會場裡(在乙個會場裡安排盡可能多的活動).

* .重新選擇乙個會場,遍歷所有沒有被安排的活動,把相容的活動放在這個會場中.

* 重複第二步,直到所有的活動都被安排.

#include 

#include

#include

#include

#include

//在乙個會場裡安排盡可能多的活動

using

namespace

std;

struct activity_info

;int arrangingactivities(vector

acts)

); int count = 0;

int currtime = -1; //當前時間

int i,flag=acts.size(),t=0;

while(flag)

}t++;

}return t;

}int main(void)

cout

<< arrangingactivities(acts)0;}

會場安排問題

會場安排問題 問題描述 假設要在足夠多的會場裡安排一批活動,活動的開始時間和結束時間已知,並希望使用盡可能少的會場。設計乙個有效的演算法進行安排。分析 這個問題實際上是著名的圖著色問題。若將每乙個活動作為圖的乙個頂點,不相容活動間用邊相連。使相鄰頂點著有不同顏色的最小著色數,就對應要找的最小會場數。...

會場安排問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 學校的小禮堂每天都會有許多活動,有時間這些活動的計畫時間會發生衝突,需要選擇出一些活動進行舉辦。小劉的工作就是安排學校小禮堂的活動,每個時間最多安排乙個活動。現在小劉有一些活動計畫的時間表,他想盡可能的安排更多的活動,請問他該如...

會場安排問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 學校的小禮堂每天都會有許多活動,有時間這些活動的計畫時間會發生衝突,需要選擇出一些活動進行舉辦。小劉的工作就是安排學校小禮堂的活動,每個時間最多安排乙個活動。現在小劉有一些活動計畫的時間表,他想盡可能的安排更多的活動,請問他該如...