类似这种数塔,求最大路径长度和,并且输出路径
思路:
从底层倒推上去,先合并最下面的两层,把n层数塔变成n-1层,以此类推
code:
#include<iostream>
using namespace std;
int main()
{
int a[30][30][3], n, max;
cout << "请输入数塔的层数:";
cin >> n;
//初始化数塔
for (int i = 0; i < n; i++)
for (int j = 0; j <= i; j++) {
cin >> a[i][j][0];
a[i][j][1] = a[i][j][0];
a[i][j][2] = 0;
}
//动态规划
for (int i = n - 2; i >= 0; i--)
for (int j = 0; j <= i; j++)
if (a[i + 1][j][1] > a[i + 1][j + 1][1]) {
a[i][j][1] = a[i + 1][j][1] + a[i][j][1];
a[i][j][2] = 0;
}
else {
a[i][j][1] = a[i + 1][j + 1][1] + a[i][j][1];
a[i][j][2] = 1;
}
//输出结果
int j = 0;
cout << "最大路径和:" << a[0][0][1] << endl;
for (int i = 0; i < n - 1; i++) {
cout << a[i][j][0] << "-->";
j += a[i][j][2];
}
cout << a[n - 1][j][0] << endl;
system("pause");
return 0;
}