Saturday, January 30, 2016

LightOJ - 1004 - Monkey Banana Problem

  1. /****************#####    بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيم   #####******************
  2. __________________________________________________________________________
  3. ######################  Ya-Seen Arafat(ACWizard) #########################
  4. ######################        UAP-CSE-33B        #########################
  5. *************************************************************************/
  6. #include <bits/stdc++.h>
  7. #define sc(n) scanf("%d", &n)
  8. #define scD(n) scanf("%lf", &n)
  9. #define scS(n) scanf("%s", &n)
  10. #define S 103
  11. using namespace std;
  12. int n, ar[S*3][S];
  13. int dp[S*3][S], sz[S*3];
  14. int MB(int row, int ind, int jump){
  15.     if(row > (n+n-1) || ind < 0 || ind > sz[jump])return 0;
  16.     if(dp[jump][ind] != -1)return dp[jump][ind];
  17.     if(row < n)dp[jump][ind] = (ar[jump][ind] + max(MB(row+1, ind, jump+1), MB(row+1, ind+1, jump+1)));
  18.     else dp[jump][ind] = (ar[jump][ind] + max(MB(row+1, ind-1, jump+1), MB(row+1, ind, jump+1)));
  19.     return dp[jump][ind];
  20. }
  21. int main(){
  22.     int t, cs = 0;
  23.     scanf("%d"&t);
  24.     while(t--){
  25.         memset(dp, -1sizeof(dp));
  26.         memset(ar, 0sizeof(ar));
  27.         scanf("%d"&n);
  28.         int z;
  29.         for(int i = 0; i < n; i++){
  30.             for(int j = 0; j <= i; j++){
  31.                 scanf("%d"&ar[i][j]);
  32.             }
  33.             sz[i] = i;
  34.             z = i;
  35.         }
  36.         int jj = n-1;
  37.         for(int i = z+1; i < (n+n-1); i++){
  38.             for(int j = 0; j < jj; j++){
  39.                 scanf("%d"&ar[i][j]);
  40.             }
  41.             sz[i] = jj-1;
  42.             jj--;
  43.         }
  44.         int ans = MB(100);
  45.         cout << "Case " << ++cs << ": " << ans << endl;
  46.     }
  47.     return 0;
  48. }

No comments:

Post a Comment