#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
using namespace std;
#define maxn 5005
//int ans[maxn][maxn];
int ans[2][maxn];
int longestCommonSubsequence(string &A, string &B) {
int m = A.size();
int n = B.size();
for(int i = 0; i <= m; ++i) {
ans[i%2][0] = 0;
}
for(int i = 0; i <= n; ++i) {
ans[0][i] = 0;
}
for(int i = 1; i <= m; ++i) {
for(int j = 1; j <= n; ++j) {
if(A[i-1] == B[j-1]) {
ans[i%2][j] = ans[(i-1)%2][j-1] + 1;
} else {
ans[i%2][j] = max(ans[(i-1)%2][j], ans[i%2][j-1]);
}
}
}
return ans[m%2][n];
}
int main() {
//freopen("data.in","r",stdin);
ios::sync_with_stdio(false);
int n;
cin >> n;
string A;
string B;
cin >> A;
B = A;
reverse(B.begin(), B.end());
int res = longestCommonSubsequence(A, B);
cout << n - res << endl;
return 0;
}
HDU1513 POJ1159 计蒜客 回文串(DP)
最新推荐文章于 2023-01-29 07:00:00 发布