描述
一张边长为n的二维矩阵, 0表示可走, -1表示障碍物(不可走), 1表示樱桃(可走, 走过之后变为0因为被摘掉了). 从0,0往返n-1,n-1的路上, 最多摘多少樱桃.
思路
其实可以看做两个人同时从0,0出发, 同时到达n-1, n-1, 最多摘到多少樱桃. 如果两个人位置相同并且当前是樱桃, 那么只摘一次. 开一个三维dp数组, dp[r1][c1][c2]表示甲从r1, c1出发, 乙从r2, c2出发, 最多摘的数量. 因为到达当前状态的步数是相同的, 所以r1+c1 == r2+c2, r2的值可以用前三个变量表示出来.
代码
1 | class Solution(object): |