Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- char x[550], y[550];
- int lenx, leny;
- long long memo[505][505][505];
- long long dp(int lx, int rx, int ly, int ry) {
- if(lx >= rx && ly > ry) return 1;
- if(lx > rx && ly >= ry) return 1;
- //printf("%d %d %d %d\n", lx, rx, ly, ry);
- if (memo[lx][rx][ly] != -1) return memo[lx][rx][ly];
- long long ret = 0;
- if(lx < rx && x[lx] == x[rx]) ret += dp(lx+1, rx-1, ly, ry);
- if(lx <= rx && ly <= ry && x[lx] == y[ry]) ret += dp(lx+1, rx, ly, ry-1);
- if(lx <= rx && ly <= ry && y[ly] == x[rx]) ret += dp(lx, rx-1, ly+1, ry);
- if(ly < ry && y[ly] == y[ry]) ret += dp(lx, rx, ly+1, ry-1);
- return ret % 3210121;
- }
- int main() {
- scanf("%s %s", &x, &y);
- lenx = strlen(x);
- leny = strlen(y);
- memset(memo, -1, sizeof memo);
- long long ans = dp(0, lenx-1, 0, leny-1);
- printf("%lld\n", ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement