nrk009

MAXIMUM PATH SUM DP

Apr 28th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define fast ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL)
  4. #define ll long long
  5. #define ld long double
  6. #define pb push_back
  7. #define fe first
  8. #define se second
  9. #define st(x) sort(x.begin(),x.end())
  10. #define rst(x) sort(x.rbegin(), x.rend())
  11. #define all(x) x.begin(),x.end()
  12. long double pi = 3.14159265358979323;
  13.  
  14. const double EPS = 1e-12;
  15. const int N = 1e3 + 5;
  16. const int mod = 1e9 + 7;
  17.  
  18. ll dp[N][N] , a[N][N];
  19. ll n , m ;
  20. ll func(ll i , ll j)
  21. {
  22.    
  23.     if( i == n - 1 && j == m - 1){
  24.         dp[i][j] = a[i][j];
  25.         return a[i][j];
  26.     }
  27.     if(dp[i][j] != -1)
  28.         return  dp[i][j];
  29.  
  30.     if(i < n - 1  && j < m - 1)
  31.     dp[i][j] = a[i][j] + max(func(i + 1 , j) , func(i , j + 1));
  32.     else if(i == n - 1)
  33.     dp[i][j] = a[i][j] + func(i , j + 1);
  34.     else
  35.     dp[i][j] = a[i][j] + func(i + 1 , j);
  36.     return dp[i][j];
  37.  
  38. }
  39.  
  40. int main()
  41. {
  42.     fast;
  43.     cin >> n >> m ;
  44.     for(int i = 0 ; i < n ;i++ )
  45.     {
  46.         for(int j = 0  ; j < m ; j++ ){
  47.             cin >> a[i][j];
  48.             dp[i][j] = -1;
  49.         }
  50.     }
  51.     cout << func(0,0);
  52.        
  53.     /*for(int i = n  - 1 ; i >= 0   ; i-- )
  54.     {
  55.         for(int j = m - 1 ; j >= 0 ; j-- )
  56.         {
  57.  
  58.         if( i == n - 1 && j == m - 1)
  59.             dp[i][j] = a[i][j];
  60.         else if(i < n - 1  && j < m - 1)
  61.             dp[i][j] = a[i][j] + max(dp[i+1][j], dp[i][j+1]);
  62.         else if(i == n - 1)
  63.             dp[i][j] = a[i][j] + dp[i][j+1];
  64.         else
  65.             dp[i][j] = a[i][j] + dp[i+1][j];   
  66.            
  67.         }
  68.     }
  69.     cout << dp[0][0];*/
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.    
  83.     return 0;
  84.    
  85. }
Add Comment
Please, Sign In to add comment