大厅安排大厅安排大厅安排
 
Description
 
有一个演讲大厅需要GEORGE管理,演讲者们事先定好了需要演讲的起始时间和中止时间。GEORGE想让演讲大厅得到最大可能的使用。我们要接受一些预定而拒绝其他的预定,目标自然是使演讲者使用大厅的时间最长。为方便起见,假设在某一时刻一个演讲结束,另一个演讲就可以立即开始。
 
计算演讲大厅最大可能的使用时间。
 
Input
 
第一行为一个整数n,n <= 100,表示申请的数目。
 
Output
 
一个整数,表示大厅最大可能的使用时间。
 
Sample Input
 
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
 
Sample Output
 
16
 
题目大意:
 
有n个人打算在ai至bi时开一个演讲,但只有一个场地,要使演讲时间最长,不能分开
 
解题方法:
 
先用结束时间排序,再看一看此人演讲的结果好,还是不演讲好(具体在代码里面讲)
 
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int n,f[10005];
struct rec
{int x,y;
}a[105];
bool rep(rec xx,rec yy)
{return ((xx.y<yy.y)||((xx.y==yy.y)&&(xx.x<yy.x)));
}
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+1+n,rep);for (int i=1;i<=n;i++)for (int j=a[i].y;j<=a[n].y;j++)f[j]=max(f[a[i].x]+a[i].y-a[i].x,f[j]);printf("%d",f[a[n].y]);
}