#include#include有若干個活動,第i個開始時間和結束時間是[si,fi),只有乙個教室,活動之間不能交疊,求最多安排多少個活動?#include
#include
#include
#include
using
namespace
std;
const
int maxn = 10000 + 1
;typedef
struct
point;
point p[maxn];
const
int cmp(const point a, const
point b)
intmain()}}
cout
<< cnt <
}return0;
}
分析: 我們就是想提高教室地利用率,盡可能多地安排活動。
考慮容易想到的幾種貪心策略:
(1) 開始最早的活動優先,目標是想盡早結束活動,讓出教室。
然而, 這個顯然不行,因為最早的活動可能很長,影響我們進行後面的活動。例如活動開始和結束時間分別為[0, 100), [1,2) ,[2, 3), [3, 4),[4,5],安排[0,100)的這個活動之後,其他活動無法安排,可是最優解是安排除它外的4個活動。
(2) 短活動優先, 目標也是盡量空出教室。但是不難構造如下反例: [0,5) [5,10) [3, 7), 這裡[3,7)最短,但如果我們安排了[3,7),其它兩個無法安排了。但是最優解顯然是安排其它兩個,而放棄[3,7),可見這個貪心策略也是不行的。
最後,我們來提供輸入輸出資料,由你來寫一段程式,實現這個演算法,只有寫出了正確的程式,才能繼續後面的課程。
輸入
第1行:1個數n,線段的數量(2 <= n <= 10000)輸出第2 - n + 1行:每行2個數,線段的起點和終點(-10^9 <= s,e <= 10^9)
輸出最多可以選擇的線段數量。輸入示例
3輸出示例1 52 3
3 6
2
活動安排問題
作為新一代的好青年肯定會喜歡許多的電視節目,比如說新聞聯播,焦點訪談,又如招聘類的節目有非你莫屬,職來職往,娛樂節目如快樂大本營。現在給你每個節目的開始時間和結束時間,要求你求出看盡可能多的完整節目。每個電視節目i都有乙個起始時間si和乙個結束時間fi,且si 對於活動安排問題可以用貪心演算法解決,...
活動安排問題
活動安排 描述 設有n個活動的集合e 其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。每個活動i都有乙個要求使用該資源的起始時間si和乙個結束時間fi,且si 輸入 輸入只有乙個用例,第一行為一正整數n,表示活動個數,接下來n行,每行兩個整數,分別表示第i號活...
活動安排問題
有若干個活動,第i個開始時間和結束時間是 si,fi 同乙個教室安排的活動之間不能交疊,求要安排所有活動,最少需要幾個教室?第一行乙個正整數n n 10000 代表活動的個數。第二行到第 n 1 行包含n個開始時間和結束時間。開始時間嚴格小於結束時間,並且時間都是非負整數,小於1000000000 ...