POJ1163 數字三角形 經典DP題目

2021-06-27 08:26:13 字數 1111 閱讀 8336

題目大意:

如圖所示的數字三角形,從頂部出發,在每一結點可以選擇向左走或得向右走,一直走到底層,要求找出一條路徑,使路徑上的值的和最大。(圖是我盜的)

如果用陣列num[j][i]表示j行i列的數字,dp[j][i]表示從該位置向下走的子問題的最優解,整個問題最終就是要求解dp[1][1],就是最頂端的位置的最優解。狀態轉移方程如下:dp[j][i] = max(dp[j+1][i], dp[j+1][i+1]) + num[j][i]

並且最底下一行dp[row][i] = num[row][i]。

//時間複雜度和空間複雜度均為o(n^2),採用自底向上求解的**

#include #define max 110

int max(int a, int b)

int main()

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

dp[row][i] = num[row][i];

for(j = row - 1; j >= 1; j--) // dp主迴圈

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

printf("%d\n", dp[1][1]);

return 0;

}

//時間複雜度o(n^2),空間複雜度優化到o(n),採用自底向上求解的**

#include #define max 110

int max(int a, int b)

int main()

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

dp[i] = num[row][i];

for(j = row - 1; j >= 1; j--) // dp主迴圈

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

printf("%d\n", dp[1]);

return 0;

}

POJ 1163數字三角形

所犯錯誤 1 在迴圈中用scanf輸入陣列元素時時,忘記敲 位址符,導致程式停止,改正 2 在測試時想輸出這個二維陣列的所有元素,雖然用了雙重迴圈,但輸出時只寫了a i 導致輸出了位址 3 這道題不能用萬能標頭檔案,識別不了,可以用 include 心得 1 73 8 8 1 0 2 7 4 4 4...

POJ 1163 數字三角形

portal dp經典題,ioi94考題,在各大oj上都有 1 include2 include3 include 4 include5 include6 include7 using namespace std 8 define for i,j,k for int i j i k i 9 defi...

poj1163 數字三角形 動態規劃

1.記憶遞迴型 自頂向下 d i j 來存數字 典型的遞迴問題 d r,j 出發,下一步只能走d r 1,j 或者d r 1,j 1 故對於n行的三角形 if r n maxsum r,j d r,j else maxsum r,j max maxsum r 1,j maxsum r 1,j 1 d...