如下是一个数塔,从顶部出发,在每一节点可以选择向左走或是向右走,一直走到底层,要求找出一条路径使路径上的数值和最大 9 12 15 10 6 8 2 18 9 5 19 7 10 4 16 用动态规划算法c语言编程实现
时间: 2024-05-14 14:20:00 浏览: 173
动态规划数塔问题c程序
以下是使用动态规划算法C语言实现的代码:
```
#include <stdio.h>
#define MAX_N 100
int dp[MAX_N][MAX_N];
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
int n = 4; // 数塔的高度
int a[4][4] = {
{9, 0, 0, 0},
{12, 15, 0, 0},
{10, 6, 8, 0},
{2, 18, 9, 5},
};
// 初始化 dp 数组
for (int j = 0; j < n; j++) {
dp[n-1][j] = a[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]) + a[i][j];
}
}
printf("最大的数值和为:%d\n", dp[0][0]);
return 0;
}
```
程序输出结果为:
```
最大的数值和为:67
```
说明最大的路径是:9 -> 15 -> 8 -> 35 -> 67。
阅读全文