There is an m by n grid with a ball. Given the start coordinate (i,j) of the ball, you can move the ball to adjacent cell or cross the grid boundary in four directions (up, down, left, right). However, you can at most move N times. Find out the number of paths to move the ball out of grid boundary. The answer may be very large, return it after mod 109 + 7.
就是从一个地点出发,N步之内出范围的路径有哪些,格子可以重复走,所以用步数来限制多次走来是不同路径
思路是用dp[k][r][jc代表第k步从r,c出发的路径数,动态方程:
dp[k][r][c] = (((r==0)?1:dp[k-1][r-1][c]%num)+((r==m-1)?1:dp[k-1][r+1][c]%num)+((c==0)?1:dp[k-1][r][c-1]%num)+((c==n-1)?1:dp[k-1][r][c+1]%num))%num;
public int findPaths(int m, int n, int N, int i, int j) { int num = 1000000007; long[][][] dp = new long[N+1][m][n]; for (int k = 1;k < N+1;k++) { for (int r = 0; r < m; r++) { for (int c = 0; c < n; c++) { dp[k][r][c] = (((r==0)?1:dp[k-1][r-1][c]%num)+((r==m-1)?1:dp[k-1][r+1][c]%num)+((c==0)?1:dp[k-1][r][c-1]%num)+((c==n-1)?1:dp[k-1][r][c+1]%num))%num; } } } return (int)dp[N][i][j]; }