题目描述 有一个演讲大厅需要我们管理,演讲者们事先定好了需要演讲的起始时间和中止时间。我们想让演讲大厅得到最大可能的使用。我们要接受一些预定而拒绝其他的预定,目标是使演讲者使用大厅的时间最长。假设在某一时刻一个演讲结束,另一个演讲就可以立即开始。
请依据演讲者的申请,计算出演讲大厅最大可能的使用时间
输入 第一行为一个整数 N,N≤5000,表示申请的数目。 以下 n 行每行包含两个整数 p,k,1 ≤ p < k ≤ 30000,表示这个申请的起始时间和终止时间。 输出 包含一个整数,表示大厅最大可能的使用时间。 样例输入 Copy 12 1 2 3 5 0 4 6 8 7 13 4 6 9 10 9 12 11 14 15 19 14 16 18 20 样例输出 Copy 16
#include<bits/stdc++.h>
using namespace std;
struct qwq
{
int x,y;
}a[5001];
int b[5001];
int qaq(qwq a,qwq b)
{
if(a.x==b.x)
{
return a.y<b.y;
}
else
{
return a.x<b.x;
}
}
int n,maax=0;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
}
sort(a+1,a+n+1,qaq);
for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
{
if(a[i].x>=a[j].y)
{
b[i]=max(b[i],b[j]);
}
b[i]+=a[i].y-a[i].x;
maax=max(maax,b[i]);
}
}
printf("%d",maax);
return 0;
}