Back to Leetcode

Readme

Dynamic_Programming/3665.Twisted-Mirror-Path-Count/Readme.md

latest732 B
Original Source

3665.Twisted-Mirror-Path-Count

考虑到对于镜子而言,左边入只能下边出,上边入只能右边出,所以我们需要在设计dp状态时考虑入射方向。令dp[i][j][d]表示以d方向进入(i,j)时的路径数量。令d=0表示向下,d=1表示向右。

考虑从(i-1,j)往下进入(i,j)。如果(i-1,j)是普通的格子,那么就有dp[i][j][0]+=dp[i-1][j][0]+dp[i-1][j][1].如果(i-1,j)是镜子,那么只能是向右进入镜子的路径才能往下进入(i,j),即dp[i][j][0]+=dp[i-1][j][1]

同理考虑从(i,j-1)往右进入(i,j),更新dp[i][j][1].

最终输出dp[m-1][n-1][0]+dp[m-1][n-1][1]`.

注意初始条件(0,0),可以任意设置dp[0][0][0]=1或者dp[0][0][1]=1