原题:EOJ 1824
1. 题目描述:
一个正整数组成的三角形,第一行只有一个数, 除了最底行之外每个数的左下方和右下方各有一个数。如下图
1
3 2
4 10 1
4 3 2 20
从第一行的数开始, 每次都只能左下或右下走一格, 直到走到最下行, 将沿途经过的数加起来,求和的个位数最大是多少。
Note:
1≤N≤500,N 表示数塔高度
每行的数范围是 [0,99]
2. 解题思路
本题不满足最优子结构(两个数的个位数字之和可能为两位数),因为和的个位数字只可能是 0 - 9 其中的一个,改用如下状态定义:
d[i][j][k] 表示以 (i, j) 为根的子三角形的所有数之和的个位数若有为 k 的路径则取值为1, 否则取值为0(其中 k 为 0-9 )
则解为满足 d[1][1][k] = 1 的最大 k 值。
初始数组 d 全部为 0, 从最底下一层开始算起,根据个位数字模 10 的情况,设置数组某些位为 1。 然后从下往上往左往右加,只需注意个位数字相加后模 10 即可,设置对应位为 1。
代码如下: