Description
设有一个三角形的数塔,顶点结点为根结点,每个结点有一个整数数值。从顶点出发,在每一个结点可以选择向左下走或者向右下走,一直走到底层,要求找出一条路径,使得路径上的和最大。
Input
输入数塔层数n
输入n层数塔
Output
输出最大和
Sample Input
5 13 11 8 12 7 26 6 14 15 8 12 7 13 24 11
Sample Output
max=86
代码区:
#include <iostream>
#include <cmath>
#include <string.h>
using namespace std;
int a[1000][1000];
int f[1000][1000];
int main()
{
int n,ans;
cin >> n;//输入层数
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
cin >> a[i][j];//输入每层的数据
}
}
memset(f,0,sizeof(f));//初始化
for(int r=n;r>=1;r--)//从最后一层开始推直到第一层,第一层的值为最大值
{
for(int c=1;c<=r;c++)//因为三角体所以c到r为止
{
if(r==n)f[r][c]=a[r][c];//给最底层初始赋值
else f[r][c]=a[r][c]+max(f[r+1][c],f[r+1][c+1]);
//每个数据都是原数据加上它上一层的左右结点的数中的最大值
}
}
cout << "max=" << f[1][1] << endl;
}
新手上路,有错请指正