B - 数字三角形

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

(图1)


图1给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 

注意:路径上的每一步只能从一个数走到下一层上和它最近的左边的那个数或者右边的那个数。

Input

输入的是一行是一个整数N (1 < N <= 100),给出三角形的行数。下面的N行给出数字三角形。数字三角形上的数的范围都在0和100之间。

Output

输出最大的和。

Sample

Inputcopy Outputcopy
5
7
3 8
8 1 0 
2 7 4 4
4 5 2 6 5
30

#include<iostream>
using namespace std;
int a[1010][1010],f[1010][1010];
int main()
{
	int r;
	cin>>r;
	for(int i=1;i<=r;i++)
	{
		for(int j=1;j<=i;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=r;i>=1;i--)
	{
		for(int j=1;j<=i;j++)
		{
			f[i][j]=max(f[i+1][j],f[i+1][j+1])+a[i][j];
		}
	}
	cout<<f[1][1];
    return 0;
}

上一篇:Xcode没有代码提示,could not build module 'UIKit'的另类方法


下一篇:E-简单排序