// #牛客春招刷题训练营# https://www.nowcoder.com/discuss/726480854079250432 // 我是看了题解写的,一开始没有看范围感觉自己写不了就直接看题解了,不过这个思路我应该也确实不会想到,不过其实我还是没有完全理解代码思路,我不太明白为什么不用考虑s[ls] == ss[lss] 的情况以及 ss[rs] == ss[lss] 的情况,等等我现在去试试会不会出错————ok,我回来了,出错了输出>=预期答案,如果有知道的话请您评论回(●'◡'●) #include <iostream> #include <string> #include <bitset> using namespace std; bool dp[55][55][55][55]; int main() { ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0); int T; cin >> T; while(T--){ int ans = 1; string s, ss; cin >> s >> ss; size_t size = s.size(), ssize = ss.size(); s = ' ' + s; ss = ' ' + ss; for(int lens = 0; lens <= size; lens++){ for (int lenss = 0; lenss <= ssize; lenss++){ for (int ls = 1; ls + lens - 1 <= size; ls++){ for (int lss = 1; lss + lenss -1 <= ssize; lss++){ int rs = ls + lens - 1, rss = lss + lenss - 1; if (lens + lenss <= 1) dp[ls][rs][lss][rss] = 1; else {dp[ls][rs][lss][rss] = 0; if (s[ls] == s[rs]) dp[ls][rs][lss][rss] |= dp[ls + 1][rs - 1][lss][rss]; if (s[ls] == ss[rss]) dp[ls][rs][lss][rss] |= dp[ls + 1][rs][lss][rss - 1]; if (ss[lss] == s[rs]) dp[ls][rs][lss][rss] |= dp[ls][rs - 1][lss + 1][rss]; if (ss[lss] == ss[rss]) dp[ls][rs][lss][rss] |= dp[ls][rs][lss + 1][rss - 1]; if (dp[ls][rs][lss][rss]) ans = max(ans, lens + lenss); } } } } } cout << ans << "\n"; } return 0; } // 64 位输出请用 printf("%lld")