動態規劃法 n m方格前進問題

2021-08-14 19:32:08 字數 924 閱讀 5663

在乙個n*m的方格中,m為奇數,放置有n*m個數,方格中間的下方有一人,此人可按照正前方相臨的五個方向(方格)前進但不能越出方格。人每走過乙個方格必須取此方格中的數。要求找到一條從底到頂的路徑,使其數相加之和為最大。輸出和的最大值。

演算法設計:

可以使用動態規劃方法,從頂部開始,將第二排的每個數加上頂部第一排的最優解,將6排的問題縮小為5排的問題,然後重複該操作,直到底部最後一排,此時可以發現人只能選取5個方向,所以排除掉不能選取方向後選取最大值即可

#includeint main(void)

, ,,,

,};int b[6][7],c[6][7];

int i,j,k;

int max;

int flag;

for(i=0;i<6;i++)

for(j=0;j<7;j++)

for(i=1;i<5;i++)}}

b[i][j]=max;

c[i][j]=flag;}}

for(j=1;j<=5;j++)//i=5}}

b[i][j]=max;

c[i][j]=flag;

}max=0;

for(j=1;j<=5;j++)

}printf("從底到頂最大和值為:%d\n\n",max);

//temp=c[i][flag];

printf("從底到頂分別取數:");

動態規劃法

在學習動態規劃法之前,我們先來了解動態規劃的幾個概念 1 階段 把問題分成幾個相互聯絡的有順序的幾個環節,這些環節即稱為階段。2 狀態 某一階段的出發位置稱為狀態。3 決策 從某階段的乙個狀態演變到下乙個階段某狀態的選擇。4 狀態轉移方程 前一階段的終點就是後一階段的起點,前一階段的決策選擇匯出了後...

動態規劃法

有些問題在分解時會產生許多子問題,且分解出的自問題互相交織,因而在解這類問題時,將可能重複多次解乙個子問題。這種重複當然是不必要的,解決方法可以在解決每個子問題後把它的解 包括其子子問題的解 保留在乙個 中,若遇到求與之相同的子問題時,dp演算法又稱動態規劃,是資訊學競賽中選手必須熟練掌握的一種演算...

動態規劃法

最近遇到了一道挺有意思的演算法題 四種硬幣 1元3元4元5元 問 想要湊成n元錢最少幾枚硬幣?public class coinsgamemain fun 7,is public static void fun int k,int is i1 l min i2 if l k private stat...