题目大意:
我们要在足够多的会场里举行各种活动,一个会场在同一时刻只能安排一个活动,希望使用尽可能少的会场总数。假设一个活动结束后,立即可以在这个会场中进行下一个活动。求一段时间中需要的最少会场数。思路:
纯暴力的题目! 我们可以以开始时间来快排,再从1到n枚举每个活动的时间,求出最少所需的会场数。 时间复杂度:O(n^2)代码:
#include#include #include using namespace std;int a[1001],b[1001],c[1001],sum,n,num;void sorts(int l,int r){ int i,j,z; i=l; j=r; z=a[(i+j)/2]; do { while (a[i] z) j--; if (i<=j) { swap(a[i],a[j]); swap(b[i],b[j]); i++; j--; } } while (i<=j); if (i l) sorts(l,j);}int main(){ freopen("meet.in","r",stdin); freopen("meet.out","w",stdout); scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]); sorts(1,n); //手打快排 sum=1; c[1]=b[1]; //初始化 for (int i=2;i<=n;i++) //枚举 { num=0; for (int j=1;j<=sum;j++) if (c[j]<=a[i]&&c[j]>c[num]) num=j; if (num==0) //使用已有会场 { sum++; c[sum]=b[i]; } else //新开一个会场 { c[num]=b[i]; } } printf("%d\n",sum); return 0;}