第三周-1.1数字三角形

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oytf10001/article/details/88594702

                               数字三角形


时间限制:2 sec

空间限制:256 MB

问题描述

给定一个高度为 n 的“数字三角形”,其中第 i 行(1<=i<=n)有 i 个数。(例子如下图所示)

初始时,你站在“数字三角形”的顶部,即第一行的唯一一个数上。每次移动,你可以选择移动到当前位置正下方或者当前位置右下方的位置上。即如果你在 (i,j)(表示你在第i行从左往右数第j个数上,下同),你可以选择移动到 (i+1,j) 或 (i+1,j+1)。

你想让你经过的所有位置(包括起点和终点)的数字总和最大。求这个最大值。

输入格式

第一行一个正整数 n,表示数字三角形的大小。

第 2 行到第 n+1 行,第 i+1 行为 i 个用空格隔开的非负整数,描述数字三角形的第 i 行。

输出格式

一行一个整数,表示经过路径上数的最大总和。

样例输入

4
1
2 3
4 5 6
7 8 9 10

样例输出

20

样例解释

不停地向右下走即可。

数据范围

对于 50% 的数据,保证 n<=5。

扫描二维码关注公众号,回复: 5557557 查看本文章

对于 100% 的数据,保证 n<=1,000,保证数字三角形内的数不超过 10^6。

提示

[如果我们使用搜索算法,我们会在搜索时记录哪些信息呢?]

[当前到达的点的坐标、当前经过路径上数的总和!]

[总和显然是越大越好!]

[于是可以设计出状态:dp[i][j] 表示走到坐标为 (i,j) 的点时的最大总和。]

[很容易就可以设计出状态转移方程啦!]

另外,为了帮助大家完成题目,我们提供了只包含了输入输出功能的程序模板,也提供了含有算法的大部分实现细节的程序。

你可以根据自己的实际情况,在这些程序的基础上进行作答,或不参考这些程序,这将与你的得分无关。

这些程序可以从【这里】下载。

猜你喜欢

转载自blog.csdn.net/oytf10001/article/details/88594702