动态规划-数字三角形C语言实现
时间: 2023-12-20 07:29:14 浏览: 107
动态规划是一种常用的算法思想,数字三角形是动态规划的一个经典问题。下面是一个C语言实现数字三角形的动态规划算法的示例代码:
```c
#include <stdio.h>
#define MAX_N 100
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
int n;
int a[MAX_N][MAX_N];
int dp[MAX_N][MAX_N];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
scanf("%d", &a[i][j]);
}
}
for (int i = 0; i < n; i++) {
dp[n-1][i] = a[n-1][i]; }
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;
}
```
该算法的时间复杂度为O(n^2),其中n为数字三角形的行数。具体实现过程如下:
1. 首先读入数字三角形的行数n和每行的数字a[i][j]。
2. 初始化dp[n-1][i]为a[n-1][i],即最后一行的dp值为该行的数字。
3. 从倒数第二行开始,对于每个数字a[i][j],计算dp[i][j]的值,即dp[i][j] = max(dp[i+1][j], dp[i+1][j+1]) + a[i][j],其中max函数返回两个数的最大值。
4. 最终dp即为数字三角形的最大和。
阅读全文