在乙個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...