数塔问题

试题描述

 

如图所示为一个数字三角形。请编一个程序计算从顶到底的某处的一条路径,使该路径所经过的数字总和最大。只要求输出总和。

1.   一步可沿左斜线向下或右斜线向下走;

2.   三角形行数小于等于100;

3.   三角形中的数字为0,1,…,99;

 

    7    3 8   8 1 0  2 7 4 4 4 5 2 6 5

 

 

输入
输入数据共n+1行,第一行为三角形行数n,后面n行表三角形每一行的数字。
输出
输出结果总和。
输入示例
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
输出示例
30

 

#include <iostream>
using namespace std;
int main()
{
    int a[101][101],n,sum=0;
    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=i;j++)
            cin>>a[i][j]; 
    for(int i=n-1;i>=1;i--)
    {
        for(int j=i;j>=1;j--)
        {
            if(a[i+1][j+1]>=a[i+1][j])
                a[i][j]+=a[i+1][j+1];
            else
                a[i][j]+=a[i+1][j];
        }
    }
    cout<<a[1][1];
}
View Code

 

posted @ 2017-03-18 11:22  Dijkstra·Liu  阅读(564)  评论(0编辑  收藏  举报