Advertisement
Guest User

jadi

a guest
Feb 21st, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.85 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. char x[550], y[550];
  5. int lenx, leny;
  6.  
  7. long long memo[505][505][505];
  8.  
  9. long long dp(int lx, int rx, int ly, int ry) {
  10. if(lx >= rx && ly > ry) return 1;
  11. if(lx > rx && ly >= ry) return 1;
  12. //printf("%d %d %d %d\n", lx, rx, ly, ry);
  13.  
  14. if (memo[lx][rx][ly] != -1) return memo[lx][rx][ly];
  15.  
  16. long long ret = 0;
  17. if(lx < rx && x[lx] == x[rx]) ret += dp(lx+1, rx-1, ly, ry);
  18. if(lx <= rx && ly <= ry && x[lx] == y[ry]) ret += dp(lx+1, rx, ly, ry-1);
  19. if(lx <= rx && ly <= ry && y[ly] == x[rx]) ret += dp(lx, rx-1, ly+1, ry);
  20. if(ly < ry && y[ly] == y[ry]) ret += dp(lx, rx, ly+1, ry-1);
  21. return ret % 3210121;
  22. }
  23.  
  24. int main() {
  25. scanf("%s %s", &x, &y);
  26. lenx = strlen(x);
  27. leny = strlen(y);
  28. memset(memo, -1, sizeof memo);
  29. long long ans = dp(0, lenx-1, 0, leny-1);
  30. printf("%lld\n", ans);
  31. return 0;
  32. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement