動態規劃學習

2021-08-20 03:24:03 字數 1384 閱讀 5803

首先是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]]+w[i])。

關鍵**:

for

(inti=0;i<n;i++)

for(

intj=v;j>=c[i];j--)dp[j]=max(dp[j-c[i]]+w[i],dp[j]);

其次是連續子串行的最大和,dp[i]表示以a[i]為結尾的連續子串行的最大和,則狀態轉移方程為dp[i]=max(dp[i-1],a[i]),關鍵**:

for

(inti=1;i<n;i++)dp[i]=max(dp[i-1]+a[i],a[i]);

最後是最大嚴格遞增子串行的和,個人感覺有點像01揹包,可以看做是乙個二維**,每次都更新到最大值。dp[i]表示以a[i]為結尾的最大嚴格遞增子串行的和。只要在i之前的,且比a[i]小的都滿足條件。關鍵**:

for

(inti=0;i<n;i++)

}

動態規劃學習

把位置 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...

動態規劃學習二

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

動態規劃學習總結

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