NYoj 14会场安排问题
會場安排問題
?時間限制:3000 ms? |? 內存限制:65535 KB
難度:4
描述 學校的小禮堂每天都會有許多活動,有時間這些活動的計劃時間會發生沖突,需要選擇出一些活
動進行舉辦。小劉的工作就是安排學校小禮堂的活動,每個時間最多安排一個活動。現在小劉有一些
活動計劃的時間表,他想盡可能的安排更多的活動,請問他該如何安排。
輸入第一行是一個整型數m(m<100)表示共有m組測試數據。 ?每組測試數據的第一行是一個整數n(1<n<10000)表示該測試數據共有n個活動。 ?隨后的n行,每行有兩個正整數Bi,Ei(0<=Bi,Ei<10000),分別表示第i個活動的起始與結束時間
(Bi<=Ei) ?輸出對于每一組輸入,輸出最多能夠安排的活動數量。 ?每組的輸出占一行樣例輸入2 2 1 10 10 11 3 1 10 10 11 11 20 ?樣例輸出1 2提示注意:如果上一個活動在t時間結束,下一個活動最早應該在t+1時間開始
?
?
最好改進下排序算法,超時 #include<stdio.h> void sort(int *s,int *f,int n) { int i,j,temp; for(i=1;i<n;i++)//冒泡排序 { for(j=0;j<n-i;j++) { if(f[j]>f[j+1])//結束時間由小到大排序 { temp=f[j]; f[j]=f[j+1]; f[j+1]=temp; //或者a^=b^=a^=b
temp=s[j]; s[j]=s[j+1]; s[j+1]=temp; } } } } int greedyselector(int *s,int *f,int n) { int i,j=0; int count=1; for( i=1;i<n;i++) { if(s[i]>=f[j]+1) { j=i; count++;
} } return count; } int main() { int m;? int n,i; int count;? int s[10000],f[10000]; scanf("%d",&m); while(m--) {
scanf("%d",&n); for(i=0;i<n;i++) scanf("%d%d",&s[i],&f[i]);? sort(s,f,n); count=greedyselector(s,f,n); printf("%d\n",count); } return 0; }
轉載于:https://www.cnblogs.com/hxsyl/archive/2012/04/12/2444986.html
總結
以上是生活随笔為你收集整理的NYoj 14会场安排问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML5编程实战之二:用动画的形式切换
- 下一篇: Nios中PIO的INT