Kaidul

UVa 10617

Dec 1st, 2013
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define Max 70
  4. #define i64 long long
  5.  
  6. i64 dp[Max][Max];
  7. char str[Max];
  8.  
  9. int solve(int begin, int end) {
  10.     if(begin == end)
  11.         return 1;
  12.    
  13.     if(begin > end)
  14.         return 0;
  15.    
  16.     if(dp[begin][end] != -1)
  17.         return dp[begin][end];
  18.    
  19.     if(str[begin] == str[end])
  20.         return dp[begin][end] = solve(begin, end - 1) + solve(begin + 1, end) + 1;
  21.     else
  22.         return dp[begin][end] = solve(begin, end - 1) + solve(begin + 1, end) - solve(begin + 1, end - 1);
  23. }
  24.  
  25. int main(void) {
  26.     int tcase;
  27.     int length;
  28.     scanf("%d", &tcase);
  29.     while(tcase--) {
  30.         int i, j, k;
  31.         long long int temp;
  32.         scanf("%s", str);
  33.         length = strlen(str);
  34.         memset(dp, 0, sizeof dp);
  35.         for(i = 0; i < length; i ++)
  36.             dp[i][i] = 1;
  37.        
  38.         for(int k = 1; k < length; k++)
  39.             for(int i = 0; i < length - k; i++) {
  40.                 int j = i + k;
  41.                 if(str[i] == str[j])
  42.                     dp[i][j] = dp[i][j - 1] + dp[i + 1][j] + 1;
  43.                 else
  44.                     dp[i][j] = dp[i][j - 1] + dp[i + 1][j] - dp[i + 1][j - 1];
  45.             }
  46.        
  47.      printf("%lld\n", dp[0][length - 1]);
  48.      
  49.      //top-down yields to TLE
  50.      //memset(dp, -1, sizeof dp);
  51.      //printf("%d\n", solve(0, length - 1));
  52.     }
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment