活動選擇(貪心 貪心 回溯深搜)

2021-10-04 06:52:15 字數 1288 閱讀 4694

描述

學校在最近幾天有n個活動,這些活動都需要使用學校的大禮堂,在同一時間,禮堂只能被乙個活動使用。由於有些活動時間上有衝突,學校辦公室人員只好讓一些活動放棄使用禮堂而使用其他教室。

現在給出n個活動使用禮堂的起始時間begini和結束時間endi(begini < endi),請你幫助辦公室人員安排一些活動來使用禮堂,要求安排的活動盡量多。

格式輸入格式

第一行乙個整數n(n≤1000); 接下來的n行,每行兩個整數,第乙個begini,第二個是endi(begini < endi≤32767)。

輸出格式

輸出最多能安排的活動個數。

樣例輸入樣例

11

3 51 4

12 14

8 12

0 68 11

6 10

5 73 8

5 92 13

輸出樣例

4
貪心加回溯,只過了20%,其他全卡死在測試機的時間上(time limit exceed),**應該沒有問題,貼出來給用同種寫法的人做參考。解題思想:先排序,對起始時間從小到大排,當起始時間相同時,對活動時間間隔從小到大排(已改為只對結束時間排序),然後進行回溯搜尋,找最大值。既然是時間問題,所以想著去優化遞迴時間,但能力有限,也沒查到什麼優化的資料,所以放棄此思路,通過看其他人的博文,發現只需要使用貪心就行,對結束時間從小到大排,然後遍歷一遍。

//貪心加回溯

#include using namespace std;

int n, mx=0, cur=0, count=0;

struct meeting m[1005];

bool compare (const meeting &m1, const meeting &m2)

void dfs(int cur, int j, int count)

for (int i=j; iusing namespace std;

int n, mx=0, cur=0, count=0;

struct meeting m[1005];

bool compare (const meeting &m1, const meeting &m2)

int main()

sort (m, m+n, compare);

int tmp=0, sum=0;

for (int i=0; i} printf ("%d", sum);

return 0;

}

活動選擇 貪心)

time limit 1000ms memory limit 65536kb problem description 學校的大學生藝術中心週日將面向全校各個學院的學生社團開放,但活動中心同時只能供乙個社團活動使用,並且每乙個社團活動開始後都不能中斷。現在各個社團都提交了他們使用該中心的活動計畫 即活...

貪心 活動選擇

problem description 學校的大學生藝術中心週日將面向全校各個學院的學生社團開放,但活動中心同時只能供乙個社團活動使用,並且每乙個社團活動開始後都不能中斷。現在各個社團都提交了他們使用該中心的活動計畫 即活動的開始時刻和截止時刻 請設計乙個演算法來找到乙個最佳的分配序列,以能夠在大學...

活動選擇 貪心

題目描述 假設有乙個需要使用某一資源的n個活動所組成的集合s,s 該資源一次只能被乙個活動所占用,每乙個活動有乙個開始時間bi和結束時間ei bi ei 若bi ej或bj ei,則稱活動i和活動j相容。你的任務是 選擇由互相相容的活動所組成的最大集合。輸入共n 1行,其中第1行為n,第2行到第n ...