活动安排问题
Input
第一行一个正整数n (n <= 10000)代表活动的个数。 第二行到第(n + 1)行包含n个开始时间和结束时间。 开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
Output
一行包含一个整数表示最少教室的个数。
Input示例
3 1 2 3 4 2 9
Output示例
2
思路:先安开始时间排序,然后利用贪心思想使每个开的房间利用率达到最大即可;这是使用暴力做的,明天提供更加简单的方法;
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> using namespace std; struct aaa { int a; int b; }aa[10001]; bool cmp(aaa x,aaa y) { return x.a<y.a; }; int main() { int n,i,j,count=0,t=0,k,x; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%d",&aa[i].a,&aa[i].b); } sort(aa,aa+n,cmp); //for(i=0;i<n;i++) //cout<<aa[i].a <<aa[i].b; while(count<n) { k=0; for(i=0;i<n;i++) { if(aa[i].b!=0) x=i; break; } for(j=x;j<n;j++) { if(aa[j].a>=k&&aa[j].b!=0) { k=aa[j].b; aa[j].b=0; count++; } } t++; } printf("%d",t); return 0; }

浙公网安备 33010602011771号