一.题目
二.解题思路
第一步:用两个二维数组分别存储初始硬币情况和机器人每走一步对应手中硬币的情况.
a[i][j] 表示输入的硬币情况
b[i][j] 表示机器人每走一步对应位置上,收集的硬币数
第二步:每个位置上的硬币数计算方法有两种:
一是上方的硬币数+自身
二是左方的硬币数+自身
(黑线代表向右方,红线代表向下方)
因此可以得到递推公式:b[i][j] = max( a[i-1][j] , a[i][j-1] ) + a[i][j]
此处注意:
我采用特殊处理,将数组的下标统一从a[1][1],b[1][1]开始存储.a[0][0]和b[0][0]都初始化为0,因此,如果下标选择从1开始,就可以免去讨论特殊情况(b[i][j]第一行的结果只能不断向右递加,第一列的结果也只能不断向下递加)从而只需要套用递归公式.
第三步:得到数组b[i][j]之后,找到其中最大的数,即为所求.
以所给样例举例,如下图所示: