用C语言实现动态规划——数塔问题,代码能执行
时间: 2023-08-15 08:31:12 浏览: 113
动态规划数塔问题c程序
好的,以下是用C语言实现数塔问题的动态规划代码:
```c
#include <stdio.h>
#define MAX_N 100
int a[MAX_N][MAX_N]; // 数塔
int dp[MAX_N][MAX_N]; // dp 数组
int max(int a, int b) { // 返回两数中较大的数
return a > b ? a : b;
}
int main() {
int n; // 数塔的层数
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
scanf("%d", &a[i][j]);
}
}
// 初始化 dp 数组
for (int j = 1; j <= n; j++) {
dp[n][j] = a[n][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]) + a[i][j];
}
}
// 输出结果
printf("%d\n", dp[1][1]);
return 0;
}
```
你可以将以上代码保存为 `main.c` 文件并通过编译器编译执行。当你输入数塔的层数和每层的数字后,程序将输出数塔问题的最大路径和。
阅读全文