假設要在足夠多的會場裡安排一批活動,並希望使用盡可能少的會場。設計乙個有效的貪心演算法進行安排。(這個問題實際上是著名的圖著色問題。若將每個活動作為圖的乙個頂點,不相容活動間用邊相連。使相鄰頂點著有不同的顏色的最小著色數,相當於要找的最小會場數)
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 描述 學校的小禮堂每天都會有許多活動,有時間這些活動的計畫時間會發生衝突,需要選擇出一些活動進行舉辦。小劉的工作就是安排學校小禮堂的活動,每個時間最多安排乙個活動。現在小劉有一些活動計畫的時間表,他想盡可能的安排更多的活動,請問他該如...