Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <string>#include <cstdio>#include <algorithm>using namespace std;int a[2105][2105];int f[2015][2105];int main(){//freopen("testcase", "r", stdin);//freopen("out", "w", stdout);string s1, s2;cin >> s1 >> s2;for (size_t i = 0; i != s1.size(); i++){for (size_t j = 0; j != s2.size(); j++){if (s1[i] != s2[j]) f[i + 1][j + 1] = 0;else f[i + 1][j + 1] = f[i][j] + 1;}}for (size_t i = 0; i != s1.size(); i++){for (size_t j = 0; j != s2.size(); j++){a[i + 1][j + 1] = max(a[i + 1][j], a[i][j + 1]);if (f[i + 1][j + 1] == 3){a[i + 1][j + 1] = max(a[i+1][j+1],a[i - 2][j - 2] + 3);}else if (f[i + 1][j + 1] > 3){a[i + 1][j + 1] = max(a[i + 1][j + 1], max(a[i][j] + 1, a[i - 2][j - 2] + 3));}}}