Advertisement
nikunjsoni

1269

Jun 15th, 2021
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     int dp[501][501];
  4.     int numWays(int steps, int arrlen) {
  5.         memset(dp, -1, sizeof dp);
  6.         return dfs(steps, 0, steps, arrlen);
  7.     }
  8.  
  9.     int dfs(int curSteps, int pos, int steps, int len){
  10.         if(pos<0 || pos>=len || curSteps < 0) return 0;
  11.         if(curSteps == 0 && pos == 0) return 1;
  12.         if(dp[pos][curSteps] != -1) return dp[pos][curSteps];
  13.        
  14.         long long int paths = 0, mod=int(1e9)+7;
  15.         paths += dfs(curSteps-1, pos+1, steps, len)%mod;
  16.         paths += dfs(curSteps-1, pos-1, steps, len)%mod;
  17.         paths += dfs(curSteps-1, pos, steps, len)%mod;
  18.         return dp[pos][curSteps] = paths%mod;
  19.     }  
  20. };
  21.  
  22. ----------------------
  23.  
  24. class Solution {
  25. public:
  26.     int numWays(int steps, int arrLen) {
  27.         int sz = min(steps/2+1, arrLen);
  28.         vector<int> v1(sz+2), v2(sz + 2);
  29.         v1[1] = 1;
  30.         while(steps--){
  31.             for(auto i = 1; i <= sz; ++i)
  32.                 v2[i] = ((long)v1[i] + v1[i - 1] + v1[i + 1]) % 1000000007;
  33.             swap(v1, v2);
  34.         }
  35.         return v1[1];
  36.     }
  37. };
  38.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement