free×性护士vidos中国,欧美激情综合色综合啪啪五月,国产精品美女久久久久av福利,av撸色,а√天堂 地址 在线

問答

貪心算法 活動(dòng)安排問題

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

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

最佳答案

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

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

相關(guān)問題

車友關(guān)注

最新標(biāo)簽

按字母分類:
ABCDEFGHIJKLMNOPQRSTWXYZ0-9