將待求解問題分解成若干個子問題
經典三角問題
;//記憶陣列
intmaxsum
(int i,
int j)
}int
main
(void)}
cout<<
maxsum(1
,1);
return0;
}由於遞迴會導致重複計算,使得時間複雜度變高,所以上面的記憶陣列用來儲存結果。
一般的遞迴都可以用陣列,就是遞推寫出來
#include
#include
#include
#define maxm 1010
using namespace std;
int n;
int arr[maxm]
[maxm]
;int maxsum[maxm]
[maxm]
;//儲存結果的陣列
intmain
(void)}
for(
int i=
1;i<=n;i++
)for
(int i=n-
1;i>=1;
--i)
} cout<
[1]<
//最頂上的數字就是最大的
return0;
}
總結就是還是從下往上看 寒假集訓小結之動態規劃
time limit 1000 ms memory limit 65536 kib submit statistic problem description 給定乙個由n行數字組成的數字三角形如下圖所示。試設計乙個演算法,計算出從三角形的頂至底的一條路徑,使該路徑經過的數字總和最大。對於給定的由n行...
寒假集訓作業(6) 動態規劃初步
include using namespace std int money 8 long int dp 8 251 int main for i 0 i 251 i for i 2 i 8 i else while cin n n 0 找零錢 dynamic programming 最後還是用一下 ...
大一寒假集訓4 動態規劃
個人對dp的理解 記憶化,從小到大,先求出小問題的最優解,然後狀態轉移逐步求出原問題的解。遞推是神,des。使用dp前提 步驟 確定的子問題和求狀態轉移方程的切入點 對於題目中給出的步驟,明示的,比如上下移動的規則,字串的增刪改。暗示的,揹包問題的裝或不裝,裝乙個或裝多個。注意的點 1 空間不夠可以...