選課樹形動態(tài)規(guī)劃_第1頁
選課樹形動態(tài)規(guī)劃_第2頁
選課樹形動態(tài)規(guī)劃_第3頁
選課樹形動態(tài)規(guī)劃_第4頁
選課樹形動態(tài)規(guī)劃_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

選課給定M門課程,每門課程有一個學分要從M門課程中選擇N門課程,使得學分總和最大其中選擇課程必須滿足以下條件:每門課程最多只有一門直接先修課要選擇某門課程,必須先選修它的先修課M,N<=500分析每門課程最多只有1門直接先修課,如果我們把課程看成結點,也就是說每個結點最多只一個前驅結點。如果把前驅結點看成父結點,換句話說,每個結點只有一個父結點。顯然具有這種結構的模型是樹結構,要么是一棵樹,要么是一個森林。這樣,問題就轉化為在一個M個結點的森林中選取N個結點,使得所選結點的權值之和最大。同時滿足每次選取時,若選兒子結點,必選根結點的條件。樣例分析如圖1,為兩棵樹,我們可以虛擬一個結點,將這些樹連接起來,那么森林就轉會為了1棵樹,選取結點時,從每個兒子出發(fā)進行選取。顯然選M=4時,選3,2,7,6幾門課程最優(yōu)。動態(tài)規(guī)劃如果我們單純從樹的角度考慮動態(tài)規(guī)劃,設以i為根結點的樹選j門課程所得到的最大學分為f(i,j), 設虛擬的樹根編號為0,學分設為0,那么,ans=f(0,n+1)如果樹根選擇1門功課,剩下j-1門功課變成了給他所有兒子如何分配的資源的問題,這顯然是背包問題。設前k個兒子選修了x門課程的最優(yōu)值為g(k,x),則有其中: 0<=x<=j-1,ans=g(son(0),n+1)構造樹結構readln(n,m);inc(m);fori:=1tondo{父親表示法構造樹}beginreadln(pr[i],v[i]);{pr是前驅結點,v價值}inc(t[pr[i]]);{t記錄結點的兒子個數(shù)}ne[pr[i],t[pr[i]]]:=i;{ne記錄樹}end;fori:=0tondo{ts記錄每個結點后代的個數(shù)}ts[i]:=ts[i-1]+t[i]+1;procedurework(now:longint);inline;vari,j,k,bas:longint;beginfori:=1tot[now]dowork(ne[now,i]);bas:=ts[now-1]+1;fori:=bas+1tobas+t[now]do{f[i,j]表示i子樹內(nèi)選j的最大價值}forj:=1tomdobegin{g[i,j]是給每個節(jié)點分配的內(nèi)部背包的空間}g[i,j]:=g[i-1,j];{i不選}fork:=1tojdo{i選k門}ifg[i-1,j-k]+f[ne[now,i-bas],k]>g[i,j]thenbeging[i,j]:=g[i-1,j-k]+f[ne[now,i-bas],k];fa[i,j]:=k;{記錄決策點}end;end;fori:=mdownto1do{計算f[i,j]}f[now,i]:=g[t[now]+bas,i-1]+v[now];end;進一步分析上述狀態(tài)方程,需要枚舉每個結點的x個兒子,而且對每個兒子的選課選擇,需要再進行遞歸處理。當然這樣可以解決問題,那么我們還有沒有其他方法呢?轉化為二叉樹如果該問題僅僅只是一棵二叉樹,我們對兒子的分配就僅僅只需考慮左右孩子即可,問題就變得很簡單了。因此我們試著將該問題轉化為二叉樹求解。圖2就是對圖1采用孩子兄弟表示法所得到的二叉樹動態(tài)規(guī)劃仔細理解左右孩子的意義(如右圖): 左孩子:原根結點的孩子 右孩子:原根結點的兄弟也就是說,左孩子分配選課資源時, 根結點必須要選修,而與右孩子無關。因此,我們設f(i,j)表示以i為根結點的二叉樹分配j門課程的所獲得的最大學分,則有,0<=k<j<n,i∈(1..m)時間復雜度O(mn2)樣例碰求解送過程件:初致始f(御i,窩0)鄰=0f(堅6,鳴1)堅=6爬,眨f(肌5,重1)吼=m小ax言{1毛,6觸}=襖6,施f番(7喚,1亦)=畢2f(初4,知1)藍=m礎ax最{1缸,2拳}=睜2,巾f跪(1電,1勞)=喚ma凡x{爐1,完f(片4,場1)貿(mào)}=耍2f(陰3,沒1)背=4懼,尾f(窮2,贏1)腐=m付ax殘{1妄,4撞}=大4f(對5,唱2)同=7f(貼7,鉗2)站=m黃ax飼{f魄(5出,1陶)+園2}虧=8f(繭4,夾2)欠=m深ax悅{f債(7勻,2逗),塊f(乓7,拔1)萬+1牛}=溜8f(亮1,甲2)委=m蛋ax幟{f稅(4尿,2戚),賤f(醉4,成1)脫+2伴}=切8f(糞2,渡2)違=m沿ax睛{f下(1套,1縱)+叼1,馳f鎖(3怒,1形)+劣1)桃}=凱5f(墓7,竹3)蔑=9f(頓4,葡3)鑄=m糧ax農(nóng){f拳(7間,2絨)+串1,目f(晌7,劑3)森}=默9f(躍1,撲3)暗=m壺ax較{f冤(4侮,2室)+考1,婆f(揮4,罷3)咐}=遞9f(維2,搜3)潤=m具ax釀{f臥(1測,1舊)+預f(郊3,在1)席+1終,f劑(1寧,2獸)+彎1}睡=9f(頸2,奸4)盞=m貍ax坊{f州(1頂,3襖)+敬1,答f忙(1辯,2榮)+崗f(個3,闖1)姿+1套}=揪ma村x{即9+美1,磚8+擴4+疑1}樸=1漏3//讀入榨數(shù)據(jù),轉化榜為孩苦子兄分弟表丟示fi鎮(zhèn)n臣>>航n寒>遼>叨m;sc吐or脹e[巡壽n+撇1]端=好0臣;br鉛ot蛙he跟r[傭n+毅1]管=貨0腐;//輸入本數(shù)據(jù)僻并轉膏化為驕左兒桌子右奶兄弟孔表示漂法fo魂r弄(in臘ti=帥1;禁i府<=倆n;湖+箏+i災)號{in彎ta,貍b陷;fi癢n克>>剃a禿>輔>潛b;if榮(壩a脫==島0肉)寨a芳=王n葵+旬1就;sc己or蜓e[燃i]各=倉b;br擦ot悟he才r[警i]衣=ch罵il漸d[僵a];ch接il債d[范a]堅=夢i;}vo庫iddf國s(in彈ti,in鞋tj){if垂(vi酷si肚te旗d[凱i]材[j])徑re劫tu貢rn狂;vi步si隱te鈔d[聚i]周[j]封=仁1;if誕(趨i=詳=0勾|泥|體j=貞=0殘)脫r明et宣ur蘋n;df文s(茶br兩ot壤he脫r[蛇i],因j巧);照/醫(yī)/如果感不選i,則珍轉移盛到狀攜態(tài)(br胳ot攔he疤r[蜘i],涂j羽)f[他i]昆[j]姓=f[宵br漢ot媽he禽r[戰(zhàn)i]見][豪j];fo擋r遙(in餡tk=舅0;元k尼<j跌;鐮++胡k)明{//選擇i,枚隸舉學穗習多洽少以i為根稠的(j矛-k數(shù)-1傭),并處轉移梁到相將應狀籠態(tài)df飼s(宴br詢ot孫he爐r[封i],濕k短);df瞇s(禾ch犯il音d[牢i],示j撞-k若-1住);//更新烘答案if蜻(f[焦br費ot除he賣r[跪i]智][茂k]國+部f[所ch養(yǎng)il

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論