動態規劃學習

2022-09-13 05:45:14 字數 729 閱讀 1270

把位置(i,j)看成乙個狀態,然後定義狀態(i,j)的指標函式d(i,j):從位置(i,j)出發時能得到的最大和。

int i,j;

//邊界值處理

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

result[n][j] = data[n][j];

//由下向上動態規劃,儲存葉子節點到當前節點的最大值

for(i=n-1; i>=1;i--)

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

result[i][j] =data[i][j]+max(result[i+1][j],result[i+1][j+1])

memset(result,-1,sizeof(result))

int solve(int i, int j)

//判斷result[i][j] >= 0,判斷該節點是否已經被計算過

if(result[i][j] >= 0)

return result[i][j];

return result[i][j] = data[i][j] + (i==n?0:max(solve(i+1,j),solve(i+1,j+1)));

}硬幣問題:

有n種硬幣,面值分別為v1, v2, v3,……,vn,每種面值的硬幣有無限個,使得面值之和恰好為s,輸出硬幣數目的最大值和最小值。——固定終點的最長路和最短路

有向無環圖為dag ( directed acyclic graph)

萬能的模板:

動態規劃學習

首先是01揹包問題,可以把它看做是乙個 行和列分別是體積從1,2,v,每個物品的花費c1,c2,cn,每個空格裡的數代表放入第i個物品在體積為j的揹包裡的最大價值。dp j 表示體積為j的揹包,放入物品後,可以得到的最大值。狀態轉移方程為if j c i dp j max dp j dp j c i...

動態規劃學習二

西洋棋中的車可以水平的或豎直的移動,乙個車要從乙個棋盤的一角移到對角線的另一角,有多少種最短路徑?a,用動態規劃演算法求解 b,用初等排列組合知識求解 題目參考 b方法高中就知道了,最後結果c 2n n 程式設計方法可以參照動態規劃學習一 這裡主要介紹第一種方法 想要得到 a n n 反推,由於不能...

動態規劃學習總結

1.有時候階段劃分不正確,導致不是最優解。2.邊界條件找錯,或資料開的小,導致超時或wrong answer等。3.初始化出錯,不是所有的初始化都是為0,有的是其他的,eg memset a,127,sizeof a 這要根據題目具體分析。4.揹包問題有時半天推不出是什麼型別的揹包問題。5.揹包問題...