【动态规划】会议厅

有一个演讲大厅需要我们管理,演讲者们事先定好了需要演讲的起始时间和终止时间。我们想让演讲大厅得到最大可能的使用。我们要接受一些预定而拒绝其他的预定,目标是使演讲者使用大厅的时间最长。假设在某一时刻一个演讲结束,另一个演讲就可以立即开始。
 任务:计算演讲大厅最大可能的使用时间。 


输入




第1行为一个整数n(n≤10000),表示申请的数目;
 以下n行每行包含两个整数p,k(0≤p

输出




一个整数,表示大厅最大可能的使用时间。 


样例输入
10
1500 2000
800 1100
600 900
500 900
1000 1400
1200 1600
150 250
100 300
1100 1300
0 400




样例输出
1700

#include

#include
#include
#include
#include
using namespace std;
int n,m,i,j,l;
int dp[50000];
struct Time
{
    int a,b;
};
bool cmp(Time x,Time y)
{
    if(x.b==y.b)
    {
        return x.a    }
    return x.b}
int main()
{
    Time time[10000];
    memset(dp,0,sizeof(dp));
    scanf("%d",&n);
    for(i=0;i    {
        scanf("%d %d",&time[i].a,&time[i].b);
    }
    sort(time,time+n,cmp);
    int ans = 0;
        for(i = 0; i < n; ++ i)
        {
            int Max = 0;
            for(j = 0; j < i; ++ j)
                if(dp[j] > Max && time[i].a >= time[j].b)
                   Max = dp[j];
            dp[i] = Max + time[i].b -time[i].a;
            ans = max(ans,dp[i]);
        }
        cout<    return 0;
}

你可能感兴趣的:(【动态规划】会议厅)