C语言代码。上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。
时间: 2023-05-11 20:03:26 浏览: 138
以下是一个解决该问题的 C 语言代码:
#include <stdio.h>
#define MAX_N 100
int n;
int triangle[MAX_N][MAX_N];
int dp[MAX_N][MAX_N];
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
scanf("%d", &triangle[i][j]);
}
}
// 初始化最后一行
for (int j = 0; j < n; j++) {
dp[n-1][j] = triangle[n-1][j];
}
// 从倒数第二行开始递推
for (int i = n-2; i >= 0; i--) {
for (int j = 0; j <= i; j++) {
dp[i][j] = max(dp[i+1][j], dp[i+1][j+1]) + triangle[i][j];
}
}
printf("%d\n", dp[0][0]);
return 0;
}
该代码使用动态规划的思想,从底部开始递推,计算出每个位置到底部的最大和,最终得到的 dp[0][0] 就是整个三角形的最大和。
阅读全文