Advertisement
shamiul93

LightOJ 1004 - Monkey Banana Problem

Mar 4th, 2017
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. /**
  2. @author - Rumman BUET CSE'15
  3. problem - 1004 - Monkey Banana Problem
  4.  
  5. concept -
  6.  
  7.     using dp array to memorize the values.
  8.     recursively count the result.
  9.     Easy one.
  10.     MY 1ST DP PROBLEM SOLVE EVER.
  11.     TOOK ME FULL 1 DAY.
  12.     I DIDN'T EVEN KNOW HOW TO SOLVE IT BEFORE.
  13.     (Yeah I know. I'm a dumbass)
  14.  
  15. */
  16.  
  17.  
  18. #include<bits/stdc++.h>
  19. using namespace std ;
  20. #define ll long long
  21. #define fo freopen("out.txt","w",stdout)
  22. #define fi freopen("in.txt","r",stdin)
  23. #define DEBUG printf("hi\n");
  24. #define DEBUG2 printf("bi\n");
  25. #define pi acos(-1)
  26. #define d 0.000000001
  27.  
  28. using namespace std ;
  29.  
  30.  
  31. ll ar[200][200]  ;
  32. ll N ;
  33. vector<ll> v[1200]  ;
  34.  
  35. ll dp(ll i, ll j)
  36. {
  37.     if( i > 2*N - 2 || j < 0 || j >= v[i].size())
  38.     {
  39.         return 0 ;
  40.     }
  41.  
  42.     if(ar[i][j]!=-1) return ar[i][j] ;
  43.  
  44.  
  45.     if(i < N-1)
  46.     {
  47.         return ar[i][j] =  max(v[i][j]+dp(i+1, j), v[i][j]+dp(i+1, j+1)) ;
  48.     }
  49.     else
  50.     {
  51.         return ar[i][j] = max(v[i][j]+dp(i+1, j-1), v[i][j] + dp(i+1, j)) ;
  52.     }
  53. }
  54.  
  55. int main()
  56. {
  57. //    fi ;
  58. //    fo ;
  59.     ll T, t = 0, a ;
  60.     scanf("%lld",&T) ;
  61.     while(T--)
  62.     {
  63.         memset(ar, -1, sizeof(ar)) ;
  64.         t++;
  65.  
  66.         scanf("%lld", &N) ;
  67.  
  68.         for(ll i = 0  ; i< 1200 ; i++)
  69.         {
  70.             v[i].clear();
  71.         }
  72.  
  73.         for(ll i = 0 ; i< N ; i++)
  74.         {
  75.             for(ll j = 0 ; j<= i ; j++)
  76.             {
  77.                 scanf("%lld",&a) ;
  78.                 v[i].push_back(a) ;
  79.             }
  80.         }
  81.  
  82.         for(ll i = 1 ; i<= N-1 ; i++)
  83.         {
  84.             for(ll j = 0 ; j < N-i ; j++)
  85.             {
  86.                 scanf("%lld",&a);
  87.                 v[N+i-1].push_back(a) ;
  88.             }
  89.         }
  90.  
  91.         ll ans ;
  92.         ans = dp(0,0) ;
  93.  
  94.         printf("Case %lld: %lld\n",t, ans) ;
  95.     }
  96.     return 0 ;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement