poj1163


题目

The Triangle

题面

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

(Figure 1)

Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right.

Input

Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle, all integers, are between 0 and 99.

Output

Your program is to write to standard output. The highest sum is written as an integer.

Examples

Input

5

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

Output

30

思路

这个题目应该从底层往高处递推,分别记下每个点到底层的最优解,状态转移方程为a[i][j]+=max(a[i+1][j],a[i+1][j+1]);

代码

#include<stdio.h>
#include<algorithm>
using namespace std;
int a[110][110];
int main()
{
    int n;
    //freopen("F:/y.txt","r",stdin);
    while(~scanf("%d",&n))
    {
       for(int i=1;i<=n;i++)
       {
           for(int j=1;j<=i;j++)
           scanf("%d",&a[i][j]);
       }
       for(int i=n-1;i>0;i--)
       {
           for(int j=1;j<=i;j++)
           {
              a[i][j]+=max(a[i+1][j],a[i+1][j+1]);
           }
       }
       printf("%d\n",a[1][1]);
    }
    return 0;
}

文章作者: xucanxx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xucanxx !
  目录