會場安排問題

2021-10-05 10:57:57 字數 1218 閱讀 2000

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

51 23

12 28

25 35

27 80

36 50

用變數num來記錄需要使用的會場數

用變數ans來記錄已開闢的會場數

用vector來儲存時間點

對於會場的使用,就兩種情況,活動開始時使用會場(num++),活動結束時**會場(num–)

我們要找到這批活動中使用的最少會場數,則可以根據活動的先後使用時間來進行公升序排序,這樣就能在一系列活動的使用會場(num++)和**會場(num–)中找到總共最少要開闢多少會場才能滿足這些活動所需了

對於需要的會場數大於已開闢的會場數num>ans,則ans=num,更新開闢的會場

當滿足num>ans時,如果當前時間點和下乙個時間點相同時,有兩種情況,下乙個時間點要麼是開始使用,要麼是結束使用,如果是結束使用的話,則開始時間和結束時間相同,不需要使用會場,就不更新了,如果是開始時間的話,在下一輪更新開闢的會場數也是一樣的(就相當於在下一輪同時開闢兩個會場)

當前時間點是倒數第二個的話,最後乙個時間點一定是結束時間,這時一定要更新ans(不用再判斷當前時間點和下乙個時間點的關係)

#include

#include

#include

using

namespace std;

struct activity

bool

operator

<

(activity other)};

vector v;

intsolve()

else

//更新需要的會場數

if(num > ans &&

(i == n -

1|| v[i]

.time < v[i +1]

.time))}

return ans;

}int

main()

sort

(v.begin()

, v.

end())

;//按時間公升序排序

cout <<

solve()

<< endl;

}

會場安排問題

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

會場安排問題

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

會場安排問題

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