nikunjsoni

576

Jun 15th, 2021
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.23 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     int mod = pow(10, 9) + 7;
  4.     int dx[4] = {-1, 0, 1, 0};
  5.     int dy[4] = {0, 1, 0, -1};
  6.     int dp[51][51][51];
  7.    
  8.     int dfs(int m, int n, int N, int i, int j) {
  9.         if (i >= m || j >= n || i < 0 || j < 0) return 1;
  10.         if(N <= 0) return 0;
  11.         if(dp[i][j][N] != -1) return dp[i][j][N];
  12.  
  13.         int totalPaths = 0;
  14.         for(int k=0; k<4; k++) {
  15.             totalPaths += dfs(m, n, N - 1, i + dx[k], j + dy[k]) % mod;
  16.             totalPaths %= mod;
  17.         }
  18.         return dp[i][j][N] = totalPaths % mod;
  19.     }
  20.      
  21.     int findPaths(int m, int n, int N, int i, int j) {
  22.         memset(dp, -1, sizeof dp);
  23.         return dfs(m, n, N, i, j);
  24.     }
  25. };
  26.  
  27. ----------------
  28.  
  29. class Solution {
  30. public:
  31.     int findPaths(int m, int n, int N, int i, int j) {
  32.       uint dp[51][50][50] = {};
  33.       for (auto Ni = 1; Ni <= N; ++Ni)
  34.         for (auto mi = 0; mi < m; ++mi)
  35.           for (auto ni = 0; ni < n; ++ni)
  36.             dp[Ni][mi][ni] = ((mi == 0 ? 1 : dp[Ni - 1][mi - 1][ni]) + (mi == m - 1? 1 : dp[Ni - 1][mi + 1][ni])
  37.                 + (ni == 0 ? 1 : dp[Ni - 1][mi][ni - 1]) + (ni == n - 1 ? 1 : dp[Ni - 1][mi][ni + 1])) % 1000000007;
  38.       return dp[N][i][j];
  39.     }
  40. };
Advertisement
Add Comment
Please, Sign In to add comment