版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
深搜與簡(jiǎn)單的動(dòng)態(tài)規(guī)劃第1頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月深度優(yōu)先搜索算法的框架:proceduredfs(i);//搜索第i個(gè)分量Xibeginifi=n+1找到一個(gè)解
//ifi=n+1thenexit;//防止數(shù)組越界
//合適的剪枝優(yōu)化:最優(yōu)化剪枝與可行性剪枝forXi
∈Si且使得(X1,X2,。。。Xi-1,Xi)滿(mǎn)足約束條件dobegin記錄滿(mǎn)足條件的Xi;//添加相應(yīng)的標(biāo)志;dfs(i+1)//刪除標(biāo)志;恢復(fù)之前的狀態(tài),根據(jù)具體情況選擇:回溯endend第2頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月1、數(shù)字三角形
有一個(gè)數(shù)字三角形,編程求從最頂層到最底層的一條路所經(jīng)過(guò)位置上數(shù)字之和的最大值。每一步只能向左下或右下方向走。下圖數(shù)據(jù)的路應(yīng)為7->3->8->7->5,和為30。輸入:第一行:R(1<=R<=100),數(shù)字三角形共有R行;以下R行:依次表示數(shù)字三角形中每行中的數(shù)字。每個(gè)數(shù)都是非負(fù)的,且<=100.輸出:一個(gè)正整數(shù),路徑上數(shù)字之和的最大值。輸入樣例:5738810274445265輸出樣例:30
738810274445265第3頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月算法1:深度優(yōu)先搜索算法DFS:二維數(shù)組a[i,j]存儲(chǔ)數(shù)字三角形。Proceduredfs(sum,i,j:integer);//從a[1,1]到走到第i行第j列即a[i,j]時(shí)所取得的值為sumbeginifi=nthenbeginifsum>maxthenmax:=sum;exit;end;
dfs(sum+a[i+1,j],i+1,j);//向左下方走
dfs(sum+a[i+1,j+1],i+1,j+1);//向右下方走end;開(kāi)始時(shí):dfs(a[1,1],1,1);結(jié)果:max
738810274445265第4頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月
738810274445265為什么當(dāng)n較大時(shí)速度慢?f:array[0..100,0..100]ofinteger;f[i,j]:(i,j)到最后一行經(jīng)過(guò)數(shù)的和的最大值f[i,j]:=max(f[i+1,j],f[i+1,j+1])+a[i,j];初始:f[n,i]=a[n,i]目標(biāo):f[1,1]第5頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月算法2:functionmax(a,b:longint):longint;beginifa>bthenexit(a)elseexit(b);end;Proceduredfs(i,j:integer);
//求(i,j)到最后一行的最大和
beginifi=nthenbeginf[i,j]:=a[i,j];exit;end;iff[i,j]>0thenexit;dfs(i+1,j);dfs(i+1,j+1);f[i,j]:=max(f[i+1,j],f[i+1,j+1])+a[i,j];end;第6頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月Begininit;fillchar(f,sizeof(f),0);dfs(1,1);writeln(f[1,1]);End.第7頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月設(shè)f[i,j]:a[i,j]到達(dá)第n行a[n,k](k:1..n)的最大值.遞推關(guān)系:f[i,j]=max{f[i+1,j],f[i+1,j+1]}+a[i,j]初始:f[n,i]:=a[n,i];1=<i<=n目標(biāo):f[1,1]算法3:
73881027
4445265第8頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月proceduremain;beginfori:=1tondof[n,i]:=a[n,i];fori:=n-1downto1do{枚舉行}forj:=1toido{枚舉每行的元素}
f[i,j]:=max(f[i+1,j],f[i+1,j+1])+a[I,j];{枚舉走法}writeln(f[1,1]);end;
functionmax(a,b:integer):integer;beginmax:=a;ifb>maxthenmax:=b;end;第9頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月依次求從起點(diǎn)(1,1)到點(diǎn)(i,j)的最大值。//正向設(shè)f[i,j]為從a[1,1]到達(dá)a[i,j]時(shí)取得的最大值.根據(jù)題意可得出遞推關(guān)系:f[i,j]=max{f[i-1,j-1],f[i-1,j]}+a[i,j]初始:f[1,1]:=a[1,1];目標(biāo):max{f[n,i]}1=<i<=n
73881027
4445265
算法4:第10頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月proceduremain;{順推}beginf[1,1]:=a[1,1];fori:=2tondoforj:=1toidof[i,j]:=max(f[i-1,j-1],f[i-1,j])+a[i,j];ans:=f[n,1];fori:=2tondoiff[n,i]>ansthenans:=f[n,i];writeln(ans);end;第11頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月總結(jié):算法1:一般的搜索(效率很低)。算法2:記憶化搜索(效率高)。算法3和算法4:動(dòng)態(tài)規(guī)劃算法(效率高)。第12頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月在一個(gè)n*m的棋盤(pán)內(nèi),一些格子里有垃圾要拾撿?,F(xiàn)在有一個(gè)能撿垃圾的機(jī)器人從左上格子里出發(fā),每次只能向右或者向下走。每次他到達(dá)一個(gè)點(diǎn),就會(huì)自動(dòng)把這個(gè)點(diǎn)內(nèi)的垃圾拾掉。問(wèn):機(jī)器人到達(dá)右下角時(shí)最多能拾多少垃圾。數(shù)據(jù)范圍:n<=100,m<=1002、Robots機(jī)器人撿垃圾第13頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月樣例輸入:67712142426444766樣例輸出:5第14頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月算法1:dfsC[i,j]=1表示(i,j)點(diǎn)有垃圾。C[i,j]=0表示沒(méi)有。proceduredfs(i,j,sum:longint);//從(i,j)走到終點(diǎn)(n,m)能撿到的垃圾數(shù)是sumbeginif(i=n)and(j=m)thenifsum>ansthenans:=sum;ifi<nthendfs(i+1,j,sum+c[i+1,j]);ifj<mthendfs(i,j+1,sum+c[i,j+1]);end;初始:dfs(1,1,c[i,j])結(jié)果是:ans第15頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月算法2:因?yàn)橹荒芟蛴一蛘呦蛳伦?。也就是說(shuō)不能走回頭路。設(shè)f[i,j]表示從(1,1)點(diǎn)開(kāi)始走到(i,j)的時(shí)候,最多撿了多少垃圾。根據(jù)(i,j)只能從(i-1,j)或者(i,j-1)走過(guò)來(lái)。得出遞推關(guān)系:f[i,j]=Max{f[i-1,j],f[i,j-1]}+c[i,j]初始:f[0,i]=0;0<=i<=m;f[j,0]=0;0<=j<=n;目標(biāo):f[n,m]第16頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月簡(jiǎn)單的主程序:Fillchar(f,sizeof(f),0);fori:=1tondoforj:=1tomdof[i,j]:=max(f[i,j-1],f[i-1,j])+c[i,j];Writeln(f[n,m]);第17頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月3:簡(jiǎn)單的背包問(wèn)題(0-1背包)
設(shè)有n種物品,每種物品有一個(gè)重量及一個(gè)價(jià)值。同時(shí)有一個(gè)背包,最大載重量為M,今從n種物品中選取若干件,使其重量的和小于等于m,而價(jià)值的和為最大。N<=100,M<1000.
輸入數(shù)據(jù):
第一行兩個(gè)數(shù):物品總數(shù)N,背包載重量M;兩個(gè)數(shù)用空格分隔;
第二行N個(gè)數(shù),為N種物品重量Wi(<1000);兩個(gè)數(shù)用空格分隔;
第三行N個(gè)數(shù),為N種物品價(jià)值Vi(<1000);兩個(gè)數(shù)用空格分隔;
輸出數(shù)據(jù):
總價(jià)值;輸入樣例1:
410
4357
1572025
輸出樣例1:
35輸入樣例2:
420
291015
291016
輸出樣例2:
19第18頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月Dfs算法:constmaxn=100;varn,m:integer;//n:物品數(shù)量;m:背包容量
w:array[1..maxn]ofinteger;//物品重量
v:array[1..maxn]ofinteger;//物品價(jià)值
best:longint;//最大價(jià)值
第19頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月proceduredfs(i,left,value:longint);//i:搜索第i件物品:判斷放還是不放到背包里
//left:背包的剩余空間
//value:已裝物品的價(jià)值
beginifi=n+1thenifvalue>bestthenbest:=value;
ifi>nthenexit;//防止溢出
dfs(i+1,left,value);//不裝iifleft>=w[i]then//裝i
dfs(i+1,left-w[i],value+v[i]);end;第20頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月主程序:
init;dfs(1,m,0);writeln(best);第21頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月0123456789100000000000001000015151515151515200071515152222222230007152020222735354000715202025273535背包的容量0--10物品0--4編號(hào)1234容量4357價(jià)值15720254件物品背包容量:10算法2:設(shè)f[i,j]:從1到i件物品中選若取干件放到容量為j的背包中,獲得的最大價(jià)值。目標(biāo)是:f[n,m]第22頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月用f[i,j]表示在第1到第i件物品中裝入重量為j的背包獲得的最大價(jià)值.f[i,j]=max{f[i-1,j],f[i-1,j-W[i]]+V[i]}(1<=i<=n,1<=j<=m)目標(biāo):f[n,m];2)f[i-1,j-W[i]]+V[i]:放第i件的價(jià)值。條件:j>=w[i]1)f[i-1,j]:不放第i件物品獲得的價(jià)值。第23頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月主程序:
fillchar(f,sizeof(f),0);fori:=1tondo
forj:=1tomdobeginf[i,j]:=f[i-1,j];
//不選擇第i件物品
if(j>=w[i])and(f[i,j]<f[i-1,j-w[i]]+v[i])//選擇第i件物品}
thenf[i,j]:=f[i-1,j-w[i]]+v[i];end;writeln(f[n,m]);end.第24頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月4:求最大連續(xù)子序列的和輸入:第一行:n(N<10000)第二行:n個(gè)整數(shù)(-3000,3000)。輸出:最大連續(xù)子序列的和。樣例:輸入:7-64-13
2-32輸出:8第25頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月算法1:枚舉任意連續(xù)區(qū)間求和找最大值
readln(n);fori:=1tondoread(a[i]);ans:=-30000000;fori:=1tondoforj:=itondobeginsum:=0;fork:=itojdosum:=sum+a[k];ifsum>ansthenans:=sum;end;writeln(ans);時(shí)間:O(n3)理想的算法:<=106第26頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月算法2:算法1的優(yōu)化
readln(n);fori:=1tondoread(a[i]);ans:=-30000000;fori:=1tondobeginsum:=0;forj:=itondobeginsum:=sum+a[j];ifsum>ansthenans:=sum;end;end;writeln(ans);
時(shí)間:O(n2)第27頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月算法1和算法2是把n個(gè)數(shù)看作獨(dú)立的沒(méi)有聯(lián)系的數(shù)來(lái)處理的。1、以a[i]為結(jié)束點(diǎn)和以a[i+1]為結(jié)束點(diǎn)的最大連續(xù)子序列有沒(méi)有聯(lián)系?有什么樣的聯(lián)系?2、f[i]:從第1項(xiàng)開(kāi)始,以a[i]為終點(diǎn)(右邊界)的子序列的最大和。如果事先已經(jīng)求得了以a[i]為結(jié)束點(diǎn)的最大連續(xù)子序列和為f[i],那么怎樣求以a[i+1]為結(jié)束點(diǎn)的最大連續(xù)子序列?-64-132-32第28頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月算法3:a[i]:存儲(chǔ)序列;f[i]:從第1項(xiàng)開(kāi)始,以a[i]為終點(diǎn)(右邊界)的子序列的最大和。f[i]=max{f[i-1]+a[i],a[i]}:即看f[i-1]的正負(fù)初始:f[1]=a[1]目標(biāo):max{f[i]}1<=i<=nproceduredp;beginf[1]:=a[1];fori:=2tondof[i]:=max(f[i-1]+a[i],a[i]);ans:=f[1];fori:=2tondoiff[i]>ansthenans:=f[i];end;時(shí)間:O(n)第29頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月在一個(gè)n×m的方格中,m為奇數(shù),放置有n×m個(gè)數(shù),如圖1643126034-56700260-1-236853400-27-17407-560-1341242人方格中間的下方有一人,此人可按照五個(gè)方向前進(jìn)但不能越出方格。如所示:
5取數(shù)n,m<=100,方格數(shù)[-100,100]第30頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月樣例輸入:671643126034-56700260-1-236853400-27-17407-560-1341242樣例輸出:51第31頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月f[i,j]:人走到(i,j)時(shí)得數(shù)的最大值。f[i,j]=max{f[i+1,j-2],f[i+1,j-1],f[i+1,j],f[i+1,j+1],f[i+1,j+2]}+a[i,j]第32頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月
proceduredp;begink:=mdiv2+1;fori:=k-2tok+2dof[n,i]:=a[n,i];fori:=n-1downto1doforj:=max(1,k-2*i)tomin(k+2*i,m)dobeginf[i,j]:=-10001;fork:=-2to2doif(k+j>=1)and(k+j<=m)and(f[i+1,k+j]>f[i,j])thenf[i,j]:=f[i+1,k+j];f[i,j]:=f[i,j]+a[i,j];end;ans:=f[1,1];fori:=2tomdoiff[1,i]>ansthenans:=f[1,i];writeln(ans);end;第33頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月6迷宮尋寶一個(gè)n行m列的迷宮(1<=n,m<=50),入口在左上角,規(guī)定只能向下或向右走。迷宮的某些地方藏有不同價(jià)值的寶藏,同時(shí)有存在一些障礙無(wú)法通過(guò)。求到達(dá)右下角出口時(shí)收集的寶藏的最大值。輸入:第一行n和m,n行m列:迷宮矩陣a[i,j](-1:障礙)保證a[1,1]<>-1。輸出:最大值。樣例:輸入2:54213-11-1-1-12-120-13125-11-12輸出2:18輸入1:342-15051
3-16-18910輸出1:33第34頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月i,ji,j+1i+1,ji-1,ji,j-1i,j第35頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月分析:逐行掃描
a[i,j]保存第i行第j列的寶藏價(jià)值.
f[i,j]走到第i行第j列時(shí)所能收集的寶藏的最大價(jià)值.狀態(tài)轉(zhuǎn)移方程:
f[i,j]=max{f[i-1,j],f[i,j-1]}+a[i,j](1<=n,1<=m)
條件:a[i,j]<>-1時(shí).
初始:f[1,1]=a[1,1];
目標(biāo):f[n,m]第36頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月functionmax(a,b:integer):integer;beginmax:=a;ifb>athenmax:=b;end;proceduredp;beginfillchar(f,sizeof(f),0);fori:=1tondoforj:=1tomdoifa[i,j]<>-1thenf[i,j]:=max(f[i-1,j],f[i,j-1])+a[i,j];end;?第37頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月-1-120第38頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月讀入數(shù)據(jù)的預(yù)處理:
ifa[i-1,j]=-1anda[i,j-1]=-1thena[i,j]=-1varf,a:array[0..maxn,0..maxm]ofinteger;{加邊界,減少判斷越界}
readln(n,m);fori:=0ton+1do{初始全是障礙}forj:=0tom+1doa[i,j]:=-1;a[0,1]:=0;{保證a[1,1]能到達(dá)}fori:=1tondoforj:=1tomdobeginread(a[i,j]);if(a[i,j-1]=-1)and(a[i-1,j]=-1)thena[i,j]:=-1;end;342-150513-16-18910第39頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月某國(guó)為了防御敵國(guó)的導(dǎo)彈襲擊,發(fā)展出一種導(dǎo)彈攔截系統(tǒng)(能發(fā)射任意發(fā)炮彈)。但是這種導(dǎo)彈攔截系統(tǒng)有一個(gè)缺陷:雖然它的第一發(fā)炮彈能夠到達(dá)任意的高度,但是以后每一發(fā)炮彈都要求高于前一發(fā)的高度。某天,雷達(dá)捕捉到敵國(guó)的導(dǎo)彈來(lái)襲。由于該系統(tǒng)還在試用階段,所以只有一套系統(tǒng),因此有可能不能攔截所有的導(dǎo)彈。
輸入敵國(guó)導(dǎo)彈依次飛來(lái)的高度(雷達(dá)給出的高度數(shù)據(jù)是不大于30000的正整數(shù)),計(jì)算這套系統(tǒng)最多能攔截多少導(dǎo)彈7、攔截導(dǎo)彈第40頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月輸入:
第一行:n(<=1000),敵國(guó)導(dǎo)彈的數(shù)量。依次是敵國(guó)導(dǎo)彈的高度(<30000)。輸出:最多攔截?cái)硣?guó)導(dǎo)彈的數(shù)量。樣例:輸入:8271910123輸出:4第41頁(yè),課件共48頁(yè),創(chuàng)作于2023年2月轉(zhuǎn)化:
求最長(zhǎng)的遞增子序列
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版無(wú)息投資借款合同書(shū)示例3篇
- 2025版房地產(chǎn)項(xiàng)目土方挖填施工合同范本2篇
- 2025年度個(gè)人帶車(chē)庫(kù)帶私人泳池房產(chǎn)交易合同
- 2025年全球及中國(guó)橈動(dòng)脈止血器行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)多功能推車(chē)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)液槽密封式高效送風(fēng)口行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球流程行業(yè)無(wú)線(xiàn)自動(dòng)化行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球并網(wǎng)型微型逆變器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2024年煤礦企業(yè)安全生產(chǎn)知識(shí)競(jìng)賽試題庫(kù)及答案(共200題)
- 2025版智慧醫(yī)療項(xiàng)目共同墊資合作協(xié)議書(shū)3篇
- 通信工程單位勞動(dòng)合同
- 國(guó)土空間生態(tài)修復(fù)規(guī)劃
- 2024年醫(yī)療器械經(jīng)營(yíng)質(zhì)量管理規(guī)范培訓(xùn)課件
- DB11T 1136-2023 城鎮(zhèn)燃?xì)夤艿婪D(zhuǎn)內(nèi)襯修復(fù)工程施工及驗(yàn)收規(guī)程
- 零部件測(cè)繪與 CAD成圖技術(shù)(中職組)沖壓機(jī)任務(wù)書(shū)
- 2024年騎電動(dòng)車(chē)撞傷人私了協(xié)議書(shū)范文
- 繪本教學(xué)課件
- 2024年計(jì)算機(jī)二級(jí)WPS考試題庫(kù)380題(含答案)
- 高低壓配電柜產(chǎn)品營(yíng)銷(xiāo)計(jì)劃書(shū)
- 2024-2030年色素病變激光治療行業(yè)市場(chǎng)現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評(píng)估規(guī)劃分析研究報(bào)告
- 結(jié)構(gòu)力學(xué)仿真軟件:STAAD.Pro:橋梁結(jié)構(gòu)建模與分析教程
評(píng)論
0/150
提交評(píng)論