數字三角形,從頂點向下移動(只能走左下/右下),求路徑數字和最大值。經典 DP:dp[i][j] = max(dp[i+1][j], dp[i+1][j+1]) + val[i][j]。
int dp[351][351]; // 原地修改輸入數組即可
// 讀入數據到 dp[i][j]
for (int i = n-1; i >= 1; i--)
for (int j = 1; j <= i; j++)
dp[i][j] += max(dp[i+1][j], dp[i+1][j+1]);
printf("%d\n", dp[1][1]);
若需輸出具體路徑,需額外記錄選擇方向(左/右),或從頂點重新貪心走一遍:if (dp[i+1][j] > dp[i+1][j+1]) go_left; else go_right;。