数字三角形
题目
给定一个如下图所示的 n n n层数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
题解
正序
以 f [ x ] [ y ] f[x][y] f[x][y]表示其为在第 x x x行,第 y y y个与之前数字之和最大的数,则:
f [ x ] [ y ] = a [ x ] [ y ] + m a x ( f [ x − 1 ] [ y − 1 ] , f [ x − 1 ] [ y ] ) f[x][y]=a[x][y]+max(f[x-1][y-1] ,f[x-1][y]) f[x][y]=a[x][y]+max(f[x−1][y−1],f[x−1][y])
决策过程中,我们仅需判断一下边界情况即可,即:
- 最左侧: f [ x ] [ y ] = a [ x ] [ y ] + f [ x − 1 ] [ y ] f[x][y]=a[x][y]+f[x-1][y] f[x][y]=a[x][y]+f[x−1][y].
- 最右侧: f [ x ] [ y ] = a [ x ] [ y ] + f [ x − 1 ] [ y − 1 ] f[x][y]=a[x][y]+f[x-1][y-1] f[x][y]=a[x][y]+