活動(dòng)選擇 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic PRoblem Description
學(xué)校的大學(xué)生藝術(shù)中心周日將面向全校各個(gè)學(xué)院的學(xué)生社團(tuán)開放,但活動(dòng)中心同時(shí)只能供一個(gè)社團(tuán)活動(dòng)使用,并且每一個(gè)社團(tuán)活動(dòng)開始后都不能中斷。現(xiàn)在各個(gè)社團(tuán)都提交了他們使用該中心的活動(dòng)計(jì)劃(即活動(dòng)的開始時(shí)刻和截止時(shí)刻)。請(qǐng)?jiān)O(shè)計(jì)一個(gè)算法來找到一個(gè)最佳的分配序列,以能夠在大學(xué)生藝術(shù)中心安排不沖突的盡可能多的社團(tuán)活動(dòng)。 比如有5個(gè)活動(dòng),開始與截止時(shí)刻分別為:

最佳安排序列為:1,4,5。
Input
第一行輸入活動(dòng)數(shù)目n(0<n<100); 以后輸入n行,分別輸入序號(hào)為1到n的活動(dòng)使用中心的開始時(shí)刻a與截止時(shí)刻b(a,b為整數(shù)且0<=a,b<24,a,b輸入以空格分隔)。
Output
輸出最佳安排序列所包含的各個(gè)活動(dòng)(按照活動(dòng)被安排的次序,兩個(gè)活動(dòng)之間用逗號(hào)分隔)。
Example Input
6 8 10 9 16 11 16 14 15 7 11
Example Output
1,5,4
**第一個(gè)選取的是最早結(jié)束的事件 下一個(gè)要選取的事件是上一個(gè)選取的事件結(jié)束之后開始的事件中最早結(jié)束的事件**
#include<stdio.h>struct node{ int num; int a; int b;}x[110],t;void ouput(int f[],int n){ int i; printf("%d",x[0].num); for(i=1;i<n;i++) { if(f[i]==1) printf(",%d",x[i].num); }}int main(){ int j,n,i,o,f[200]={0};//f標(biāo)記變量 while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) { scanf("%d%d",&x[i].a,&x[i].b); x[i].num=i+1; } for(i=0;i<=n-2;i++) { for(j=0;j<=n-i-2;j++) { if(x[j].b>x[j+1].b) { t=x[j];x[j]=x[j+1];x[j+1]=t; o=f[j];f[j]=f[j+1];f[j+1]=o; } } } int timestart=0; i=0; while(i<n) { if(x[i].a>=timestart) { f[i]=1; timestart=x[i].b; } i++; } ouput(f,n); } return 0;}新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注