演講大廳安排
description
有乙個演講大廳需要我們管理,演講者們事先定好了需要演講的起始時間和中止時間。我們想讓演講大廳得到最大可能的使用。我們要接受一些預定而拒絕其他的預定,目標是使演講者使用大廳的時間最長。假設在某一時刻乙個演講結束,另乙個演講就可以立即開始。
請依據演講者的申請,計算出演講大廳最大可能的使用時間
input
第一行為乙個整數 n,n≤5000,表示申請的數目。
以下 n 行每行包含兩個整數 p,k,1 ≤ p < k ≤ 30000,表示這個申請的起始時間和終止時間。
output
包含乙個整數,表示大廳最大可能的使用時間。
sample input 1
121 2
3 50 4
6 87 13
4 69 10
9 12
11 14
15 19
14 16
18 20
sample output 1
這是一道基於時間軸的dp,也就是說,你只需要順著時間軸走一遍就可以知道答案了;
首先存資料的方法與一般的直接存不同,只用存開始的時間點以及其持續的長度就可以了(值得注意的是乙個時間點可以同時是幾個演講開始的時間點);
存資料是可以順便將最後的乙個時間點記下作為for迴圈的邊界,然後開始dp;
每到下乙個時間點,先判斷是否繼承上乙個小時,再判斷是否有演講開始,如果有直接在演講結束的時間點插入乙個dp[i],表示到i小時最多的演講時間,到後來for迴圈到了是自然會判斷是否需要開始演講(好像有點抽象),簡單的說就是假設每個演講都批准,又同時假設不批准,因為批准的情況是直接插入的,所以對於中間的時間沒有影響,而到了演講結束的時候再判斷;
這樣講起來可能太抽象,還是上**:
#includeusing namespace std;
int n,sj,dp[30001],t[30001],ma[100][30001];
int main()
for(int i=0;i<=sj;i++)
//cout<}
cout<}
演講大廳安排
problem description 有乙個演講大廳需要我們管理,演講者們事先定好了需要演講的起始時間和中止時間。我們想讓演講大廳得到最大可能的使用。我們要接受一些預定而拒絕其他的預定,目標是使演講者使用大廳的時間最長。假設在某一時刻乙個演講結束,另乙個演講就可以立即開始。程式設計任務,計算演講大...
演講大廳安排
演講大廳安排 問題描述 有乙個演講大廳需要我們管理,演講者們事先定好了需要演講的起始時間和中止時間。我們想讓演講大廳得到最大可能的使用。我們要接受一些預定而拒絕其他的預定,目標是使演講者使用大廳的時間最長。假設在某一時刻乙個演講結束,另乙個演講就可以立即開始。程式設計任務 計算演講大廳最大可能的使用...
大廳安排 normal
題意 有乙個演講大廳需要george管理,演講者們事先定好了需要演講的起始時間和中止時間。george想讓演講大廳得到最大可能的使用。我們要接受一些預定而拒絕其他的預定,目標自然是使演講者使用大廳的時間最長。為方便起見,假設在某一時刻乙個演講結束,另乙個演講就可以立即開始。計算演講大廳最大可能的使用...