数塔问题:
问题描述:
给定一个数塔,其存储形式为如下所示的下三角矩阵。在此数塔中,从顶部出发,在每一节点可以选择向下走还是向右走,一直走到底层。请找出一条路径,使路径上的数值和最大。
输入样例(数塔):
9
12 15
10 6 8
2 18 9 5
19 7 10 4 16
输出样例(最大路径和):
算法思想:
用三个二维数组分别存储原始的数据,动态规划运算过程中的数据,和筛选的路径。
具体的思想为,第二个数组首先复制第一个数组,然后,从数塔的底部开始,每每比较n-1层的相邻两个值,取较大的一个加入n-2层,并存储下路径,具体理解看代码。最后将路径和最大值输出
代码如下
#include<iostream>
using namespace std;
int main()
{
int a[50][50][3],i,j,n;
cout << "请输入你要输入的列数:";
cin >> n;
for (i = 1; i <= n; i = i + 1)
{
for (j = 1; j <= i; j = j + 1)
{
cin >> a[i][j][1];
a[i][j][2] = a[i][j][1];
a[i][j][3] = 0;
}
}
for (i = n - 1; i >= 1; i = i - 1)
{
for (j = 1; j <= i; j = j + 1