knightL

Untitled

Nov 12th, 2011
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. typedef long long ll;
  5. int H;
  6. int K;
  7. int dp[2][51][51][51];
  8. int dp2[51];
  9. const ll MOD=1000000007;
  10. #define ADDMOD(a,b) ((a)+((ll)(b)))%MOD
  11. #define MULMOD(a,b) ((a)*((ll)(b)))%MOD
  12. int solve(int h,int l,int r,int skip_phase)
  13. {
  14.     if(h==H) return skip_phase;
  15.     if(dp[skip_phase][h][l][r]==-1)
  16.     {
  17.         dp[skip_phase][h][l][r]=0;
  18.         if(l>r) return dp[skip_phase][h][l][r]=skip_phase;
  19.         if(skip_phase)
  20.         {
  21.             dp[skip_phase][h][l][r]=1;
  22.             for(int i=l+1;i<=r;i++)
  23.             {
  24.                 dp[skip_phase][h][l][r]=ADDMOD(dp[skip_phase][h][l][r],solve(h,i,r,0));
  25.             }
  26.         }
  27.         else
  28.         {
  29.             for(int i=1;l+i-1<=r;i++)
  30.             {
  31.                 dp[skip_phase][h][l][r]=ADDMOD(dp[skip_phase][h][l][r],
  32.                         MULMOD(
  33.                                 MULMOD(
  34.                                         ADDMOD(solve(h+1,l,l+i-1,0),solve(h+1,l,l+i-1,1))
  35.                                         ,solve(h,l+i,r,1))
  36.                                 ,dp2[i])
  37.                                 );
  38.             }
  39.         }
  40.     }
  41.     return dp[skip_phase][h][l][r];
  42. }
  43. struct BricksN
  44. {
  45.     int countStructures(int w, int h, int k)
  46.     {
  47.         dp2[0]=1;
  48.         dp2[1]=1;
  49.         for(int i=2;i<=w;i++)
  50.         {
  51.             for(int j=1;j<=k;j++)
  52.             {
  53.                 dp2[i]=ADDMOD(dp2[i],dp2[i-j]);
  54.             }
  55.         }
  56.  
  57.         memset(dp,-1,sizeof(dp));
  58.         H=h;
  59.         K=k;
  60.         return ADDMOD(solve(0,0,w-1,0),solve(0,0,w-1,1));
  61.     }
  62. }ccc;
  63.  
  64. int main()
  65. {
  66.     cout<<ccc.countStructures(50,1,50)<<endl;
  67. }
  68.  
  69.  
Advertisement
Add Comment
Please, Sign In to add comment