99爱爱,专区,国产激情毛片,国产成人,中文无码A片久久同性,最近中文字幕高清字幕免费mv,国产精品黄页免费高清在线观看

問答

貪心算法 活動安排問題

提問者:hsh9882013-03-16 00:00

活動問題Time Limit:1000MS Memory Limit:65536K Total Submit:7 Accepted:2 Description 有n(n<=100)個活動,每個活動都要求使用同一會場,而在同一時間內(nèi)只有一個活動能使用這一會場。每個活動i都有一個要求使用該資源的起始時間si和一個結(jié)束時間fi,且si Input 每行2個整

最佳答案

這道題的貪心算法比較容易理解,我就不多說明了,只是提到一下算法思路1、建立數(shù)學(xué)模型描述問題。我在這里將時間理解成一條直線,上面有若干個點(diǎn),可能是某些活動的起始時間點(diǎn),或終止時間點(diǎn)。在具體一下,如果編程來實(shí)現(xiàn)的話,將時間抽象成鏈表數(shù)組,數(shù)組下標(biāo)代表其實(shí)時間,該下標(biāo)對應(yīng)的鏈表代表在這個時間起始的活動都有哪些,具體參照程序注釋。2、問題分解。為了安排更多的活動,那么每次選取占用時間最少的活動就好。那么從一開始就選取結(jié)束時間最早的,然后尋找在這個時間點(diǎn)上起始的活動,以此類推就可以找出貪心解。程序代碼:#include struct inode //自定義的結(jié)構(gòu)體 { int end; //表示結(jié)束時間 inode *next; //指向下一個節(jié)點(diǎn)的指針 };int main() { inode start[10001],*pt; int a,b,i,num=0; //num負(fù)責(zé)計(jì)數(shù),i控制循環(huán),a,b輸入時候使用 for(i=0;i<10001;i++) //初始化 { start[i].next=NULL; } while(scanf("%d %d",&a,&b)) //輸入并建立數(shù)據(jù)結(jié)構(gòu) { if(a==0&&b==0) break; pt=new inode; //創(chuàng)建新的節(jié)點(diǎn),然后將該節(jié)點(diǎn)插入相應(yīng)的位置 pt->end=b; pt->next=start[a].next; start[a].next=pt; } i=0; while(i<10001) //進(jìn)行貪心算法,i表示當(dāng)前時間 { if(start[i].next==NULL) { i++; //該時間無活動開始 } else { int temp=10001; //臨時變量,存儲該鏈表中最早的終止時間 for(pt=start[i].next;pt!=NULL;pt=pt->next) { if(pt->endend; } } i=temp; //將當(dāng)前時間設(shè)置成前一子問題的終止時間 num++; } } printf("%d
",num); //打印結(jié)果 return 0; }代碼并不一定是最快速的,但是可以求出貪心解,如果你做的是ACM編程題目,不保證能AC注釋我盡力寫了,希望對你有幫助。

回答者:liunaliuji2016-03-16 00:00

相關(guān)問題

車友關(guān)注

最新標(biāo)簽

按字母分類:
ABCDEFGHIJKLMNOPQRSTWXYZ0-9