動態規劃1006

2021-07-11 20:16:45 字數 1018 閱讀 9785

題目:

在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的:

有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?

已經告訴你了,這是個dp的題目,你能ac嗎?

input

輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n(1 <= n <= 100),表示數塔的高度,接下來用n行數字表示數塔,其中第i行有個i個整數,且所有的整數均在區間[0,99]內。

output

對於每個測試例項,輸出可能得到的最大和,每個例項的輸出佔一行。

sample input

157

3 88 1 0

2 7 4 4

4 5 2 6 5

sample output

30

**:#include

#include

int dp[1001][1001];

#define max(a,b) a>b?a:b

using namespace std;

int main(int i,int j)

{int t;

int n;

cin>>t;

while(t--)

{cin>>n;

for(i=0;i>dp[i][j];

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

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

dp[i][j]+=max(dp[i+1][j+1],dp[i+1][j]);

cout<

感想:要表示這個狀態方程比較簡單,從下往上:dp[i][j]+=dp[i+1][j+1],dp[i+1][j]從上往上呢:dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j];但是從上往下你還要判斷兩邊界的值,當它處於左邊界的時

有dp[i][0]+=dp[i-1][0];右邊界則是dp[i][i]+=dp[i-1][j-1];

動態規劃 什麼是動態規劃?

先來看看 資訊學奧賽一本通第5版 是怎麼說的 動態規劃程式設計是對解最優化問題的一種途徑 一種方法,而不是一種特殊演算法。不像前面所述的那些搜尋或數值計算那樣,具有乙個標準的數學表示式和明確清晰的解題方法。動態規劃程式設計往往是針對一種最優化問題,由於各種問題的性質不同,確定最優解的條件也互不相同,...

mysql動態規劃 動態規劃

動態規劃 能夠動態規劃的問題具有以下特點 可分解成規模更小的子問題 子問題的結果可復用 關鍵是要理解狀態轉移方程的含義就好啦!數字三角形 問題描述 在數字三角形尋找從頂到底的路徑,使得路徑經過的數字之和最大。規定每一步只能往左下或右下走,求出最大路徑和。遞迴解法 include include us...

51NOD 1006 最長公共子串行 動態規劃

給出兩個字串a b,求a與b的最長公共子串行 子串行不要求是連續的 比如兩個串為 abcicba abdkscab ab是兩個串的子串行,abc也是,abca也是,其中abca是這兩個字串最長的子串行。input 第1行 字串a 第2行 字串b a,b的長度 1000 output 輸出最長的子串行...