শুক্রবার, ৯ নভেম্বর, ২০১২

light oj---1004 - Monkey Banana Problem



  1. #include<stdio.h>
  2. #include<string.h>
  3. #define LL long long
  4. LL dp[210][210],num[210][210],n;
  5. LL max(LL a,LL b)
  6.  {
  7.      if(a>b) return a;
  8.      return b;
  9.  }
  10. LL call(LL a,LL b)
  11.  {
  12.      if(num[a][b]==0) return 0;
  13.      if(dp[a][b]!=-1) return dp[a][b];
  14.      LL ret=num[a][b];
  15.      if(a<=n)
  16.       ret+=max(call(a-1,b),call(a-1,b-1));
  17.      else
  18.      ret+=max(call(a-1,b),call(a-1,b+1));
  19.      return dp[a][b]=ret;
  20.  }
  21. int main()
  22.  {
  23.      int t;
  24.      scanf("%d",&t);
  25.      for(int i=1;i<=t;i++)
  26.       {
  27.           scanf("%lld",&n);
  28.           for(int j=0;j<=200;j++)
  29.             for(int k=0;k<=200;k++)
  30.               {
  31.                    num[j][k]=0;
  32.                    dp[j][k]=-1;
  33.               }
  34.           for(int j=1;j<n;j++)
  35.            for(int k=1;k<=j;k++)
  36.              scanf("%lld",&num[j][k]);
  37.           for(int j=n;j<2*n;j++)
  38.            for(int k=1;k<=2*n-j;k++)
  39.              scanf("%lld",&num[j][k]);
  40.           LL ans=num[2*n-1][1];
  41.           ans+=max(call(2*n-2,1),call(2*n-2,2));
  42.           printf("Case %d: %lld\n",i,ans);
  43.       }
  44.       return 0;
  45.  }

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন