



下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、算法在信息學(xué)奧賽中的應(yīng)用 (遞推法)所謂遞推,是指從已知的初始條件出發(fā),依據(jù)某種遞推關(guān)系,逐次推出所要求的各中間結(jié)果及最后結(jié)果。其中初始條件或是問(wèn)題本身已經(jīng)給定,或是通過(guò)對(duì)問(wèn)題的分析與化簡(jiǎn)后確定。可用遞推算法求解的題目一般有以下二個(gè)特點(diǎn):(1) 問(wèn)題可以劃分成多個(gè)狀態(tài);(2) 除初始狀態(tài)外,其它各個(gè)狀態(tài)都可以用固定的遞推關(guān)系式來(lái)表示。在我們實(shí)際解題中,題目不會(huì)直接給出遞推關(guān)系式,而是需要通過(guò)分析各種狀態(tài),找出遞推關(guān)系式。遞推法應(yīng)用例1騎士游歷:(noip1997tg)設(shè)有一個(gè)n*m的棋盤(pán)(2<=n<=50,2<=m<=50),如下圖,在棋盤(pán)上任一點(diǎn)有一個(gè)中國(guó)象棋馬,馬走
2、的規(guī)則為:1.馬走日字 2.馬只能向右走,即如下圖所示:任務(wù)1:當(dāng)N,M 輸入之后,找出一條從左下角到右上角的路徑。例如:輸入 N=4,M=4輸出:路徑的格式:(1,1)->(2,3)->(4,4) 若不存在路徑,則輸出"no"任務(wù)2:當(dāng)N,M 給出之后,同時(shí)給出馬起始的位置和終點(diǎn)的位置,試找出從起點(diǎn)到終點(diǎn)的所有路徑的數(shù)目。例如:(N=10,M=10),(1,5)(起點(diǎn)),(3,5)(終點(diǎn))輸出:2(即由(1,5)到(3,5)共有2條路徑)輸入格式:n,m,x1,y1,x2,y2(分別表示n,m,起點(diǎn)坐標(biāo),終點(diǎn)坐標(biāo))輸出格式:路徑數(shù)目(若不存在從起點(diǎn)到終點(diǎn)的路徑
3、,輸出0)算法分析:為了研究的方便,我們先將棋盤(pán)的橫坐標(biāo)規(guī)定為i,縱坐標(biāo)規(guī)定為j,對(duì)于一個(gè)n×m的棋盤(pán),i的值從1到n,j的值從1到m。棋盤(pán)上的任意點(diǎn)都可以用坐標(biāo)(i,j)表示。對(duì)于馬的移動(dòng)方法,我們用K來(lái)表示四種移動(dòng)方向(1,2,3,4);而每種移動(dòng)方法用偏移值來(lái)表示,并將這些偏移值分別保存在數(shù)組dx和dy中,如下表 KDxkDyk12122-131241-2 根據(jù)馬走的規(guī)則,馬可以由(i-dxk,j-dyk)走到(i,j)。只要馬能從(1,1)走到(i-dxk,j-dyk),就一定能走到(i,j),馬走的坐標(biāo)必須保證在棋盤(pán)上。我們以(n,m)為起點(diǎn)向左遞推,當(dāng)遞推到(i-dxk,
4、j-dyk)的位置是(1,1)時(shí),就找到了一條從(1,1)到(n,m)的路徑。我們用一個(gè)二維數(shù)組a表示棋盤(pán),對(duì)于任務(wù)一,使用倒推法,從終點(diǎn)(n,m)往左遞推, 設(shè)初始值an,m為(-1,-1),如果從(i,j)一步能走到(n,m),就將(n,m)存放在ai,j中。如下表,a3,2和a2,3的值是(4,4),表示從這兩個(gè)點(diǎn)都可以到達(dá)坐標(biāo)(4,4)。從(1,1)可到達(dá)(2,3)、(3,2)兩個(gè)點(diǎn),所以a1,1存放兩個(gè)點(diǎn)中的任意一個(gè)即可。遞推結(jié)束以后,如果a1,1值為(0,0)說(shuō)明不存在路徑,否則a1,1值就是馬走下一步的坐標(biāo),以此遞推輸出路徑。-1,-14,44,42,3 &
5、#160;任務(wù)一的源程序:const dx:array1.4of integer=(2,2,1,1); dy:array1.4of integer=(1,-1,2,-2);type map=record x,y:integer; end;var i,j,n,m,k:integer; a:array0.50,0.50of map;begin read(n,m); fillchar(a,sizeof(a),0); an,m.x:=-1;an,m.y:=-1;標(biāo)記為終點(diǎn) for i:=n downto 2 do 倒推 for j:=1 to m do if ai,j.x<>0 then
6、for k:=1 to 4 do begin ai-dxk,j-dyk.x:=i; ai-dxk,j-dyk.y:=j; end; if a1,1.x=0 then writeln('no') else begin存在路徑 i:=1;j:=1; write('(',i,',',j,')'); while ai,j.x<>-1 dobegin k:=i;i:=ai,j.x;j:=ak,j.y; write('->(',i,',',j,')'); end; end;en
7、d.對(duì)于任務(wù)二,也可以使用遞推法,用數(shù)組Ai,j存放從起點(diǎn)(x1,y1)到(i,j)的路徑總數(shù),按同樣的方法從左向右遞推,一直遞推到(x2,y2),ax2,y2即為所求的解。源程序(略)在上面的例題中,遞推過(guò)程中的某個(gè)狀態(tài)只與前面的一個(gè)狀態(tài)有關(guān),遞推關(guān)系并不復(fù)雜,如果在遞推中的某個(gè)狀態(tài)與前面的所有狀態(tài)都有關(guān),就不容易找出遞推關(guān)系式,這就需要我們對(duì)實(shí)際問(wèn)題進(jìn)行分析與歸納,從中找到突破口,總結(jié)出遞推關(guān)系式。我們可以按以下四個(gè)步驟去分析:(1)細(xì)心的觀察;(2)豐富的聯(lián)想;(3)不斷地嘗試;(4)總結(jié)出遞推關(guān)系式。下面我們?cè)倏匆粋€(gè)復(fù)雜點(diǎn)的例子。例2、棧(noip2003pj)題目大意:求n個(gè)數(shù)通過(guò)棧
8、后的排列總數(shù)。(1n18)如輸入 3 輸出 5算法分析:先模擬入棧、出棧操作,看看能否找出規(guī)律,我們用f(n)表示n個(gè)數(shù)通過(guò)棧操作后的排列總數(shù),當(dāng)n很小時(shí),很容易模擬出f(1)=1;f(2)=2;f(3)=5,通過(guò)觀察,看不出它們之間的遞推關(guān)系,我們?cè)俜治鯪=4的情況,假設(shè)入棧前的排列為“4321”,按第一個(gè)數(shù)“4”在出棧后的位置進(jìn)行分情況討論:(1) 若“4”最先輸出,剛好與N=3相同,總數(shù)為f(3);(2) 若“4”第二個(gè)輸出,則在“4”的前只能是“1”,“23”在“4”的后面,這時(shí)可以分別看作是N=1和N=2時(shí)的二種情況,排列數(shù)分別為f(1)和f(2),所以此時(shí)的總數(shù)為f(1)*f(2)
9、;(3) 若“4”第三個(gè)輸出,則“4”的前面二個(gè)數(shù)為“12”,后面一個(gè)數(shù)為“3”,組成的排列總數(shù)為f(2)*f(1);(4) 若“4”第四個(gè)輸出,與情況(1)相同,總數(shù)為f(3);所以有:f(4)=f(3)+f(1)*f(2)+f(2)*f(1)+f(3);若設(shè)0個(gè)數(shù)通過(guò)棧后的排列總數(shù)為:f(0)=1;上式可變?yōu)椋篺(4)=f(0)*f(3)+f(1)*f(2)+f(2)*f(1)+f(3)*f(0);再進(jìn)一步推導(dǎo),不難推出遞推式:f(n)=f(0)*f(n-1)+f(1)*f(n-2)+f(n-1)*f(0);即f(n)= (n>=1)初始值:f(0)=1;有了以上遞推式,就很容易用遞推法寫(xiě)出程序。var a:array0.18of longint; n,i,j:integer;begin readln(n); fillchar(a,sizeof(a),0); a0:=1; for i
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工賬號(hào)授權(quán)合同范本
- 凈水商業(yè)租賃合同范本
- 賣(mài)房臨時(shí)出租合同范例
- 北京農(nóng)村租房合同范本
- 代簽訂投標(biāo)合同范本
- 雙方購(gòu)車(chē)合同范本
- 單位窗簾裝修合同范例
- 代購(gòu)電纜合同范本
- 廠地購(gòu)買(mǎi)合同范本
- 吊車(chē)購(gòu)銷(xiāo)合同范本
- 小學(xué)生戲劇課件
- 考前沖刺攻略課件
- 2024年中煤電力有限公司所屬企業(yè)招聘29人筆試參考題庫(kù)附帶答案詳解
- DeepSeek介紹及其典型使用案例
- 2024年12月2025中央統(tǒng)戰(zhàn)部直屬事業(yè)單位應(yīng)屆高校畢業(yè)生公開(kāi)招聘21人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 積極心理學(xué)視角下高職院校學(xué)生心理健康教育路徑研究
- 2025年內(nèi)蒙古建筑職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年常考版參考題庫(kù)含答案解析
- 2024年湖北省煙草專(zhuān)賣(mài)局(公司)招聘筆試真題
- 2025中鐵快運(yùn)股份限公司招聘全日制普通高校畢業(yè)生35人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2024年下半年中國(guó)海油秋季校園招聘易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 《京東家法》定稿
評(píng)論
0/150
提交評(píng)論