三角形triangle

三角形triangle

图中显示了一个数字三角形。编写一个程序,计算从顶部开始到底部某个地方的路由上传递的最大数字和。每个步骤可以向左斜向下或向右斜向下。

三角形triangle_第1张图片
输入项

您的程序将从标准输入中读取。第一行包含一个整数N:三角形中的行数。接下来的N行描述了三角形的数据。三角形中的行数> 1但<=100。三角形中的行数(均为整数)在0到99之间。

输出量

您的程序将写入标准输出。最高和以整数形式写入。

样本输入

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

样本输出

30

解题思路:

用d数组存放输入数据,用maxsum数组存放数据相对应下一行最大值;

从最后一行记录,依次向上累加;

​ 就样本来说,要想知道7到底部的最大数字和,必须要知道3和8的到底部的最大数字和,要想知道3和8到底部的最大数字和,就要知道8,1,0到底部的最大数字和,要想知道8,1,0到底部的最大数字和就要知道2,7,4,4到底部的最大数字和····

​ 用maxsum记录数据下一行相关的数字和,通过比较找出最大的值,加上自身的值,就是最大数字和。

代码

#include 
#define MAX 101		//数组大小
using namespace std;

int main()
{
    int n,d[MAX][MAX],maxsum[MAX][MAX];  //d数组存放数据 
    int i,j;
    cin>>n;						//n总行数
    for(i=1;i<=n;i++)
        for(j=1;j<=i;j++)
        cin>>d[i][j];			//循环输入数据
    for(i=1;i<=n;i++)
        maxsum[n][i]=d[n][i];//maxsum数组最后一行赋初值
    for(i=n-1;i>=1;i--)
        for(j=1;j<=i;j++)	
            maxsum[i][j]=max(maxsum[i+1]   [j],maxsum[i+1][j+1])+d[i][j];//比较找出下一行的最大值,加上d[i][j]本身
            cout<

数组的大小直接用数据表示时,oj显示超时。

你可能感兴趣的:(c++,算法)