利用vs实现动态规划——数塔问题,代码能运行,有运行结果
时间: 2024-01-16 22:16:43 浏览: 52
好的,这里是利用 Visual Studio 实现数塔问题的动态规划代码:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1005;
int dp[MAXN][MAXN]; // dp[i][j]表示从(i, j)位置出发的路径中最大的数字和
int a[MAXN][MAXN]; // 存储数塔中的数字
int main()
{
int n;
cin >> n; // 输入数塔的行数
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= i; j++)
{
cin >> a[i][j]; // 输入数塔中的数字
}
}
// 从数塔的底部一行开始,逐行向上计算
for (int i = n; i >= 1; i--)
{
for (int j = 1; j <= i; j++)
{
if (i == n) // 如果是数塔的最后一行,直接赋值为该位置的数字
{
dp[i][j] = a[i][j];
}
else // 否则,从左下角和右下角的最大值加上该位置的数字得到该位置的最大数字和
{
dp[i][j] = a[i][j] + max(dp[i + 1][j], dp[i + 1][j + 1]);
}
}
}
cout << dp[1][1] << endl; // 输出从数塔顶部开始的路径中最大的数字和
return 0;
}
```
下面是一个运行结果的示例:
输入:
```
5
9
12 15
10 6 8
2 18 9 5
19 7 10 4 16
```
输出:
```
83
```
希望能对你有所帮助!