大厅安排大厅安排大厅安排
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]);
}