1. 程式人生 > >POJ 1159 Palindrome

POJ 1159 Palindrome

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int N = 5005;
short dp[N][N];
string s1, s2;
int n;
int main(){
	while(cin >> n >> s1){
		s2 = s1;
		reverse(s1.begin(), s1.end());
		for(int i = 0; i < n; ++i)
			for(int j = 0; j < n; ++j)
				if(s1[i] == s2[j])
					dp[i + 1][j + 1] = dp[i][j] + 1;
				else
					dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j]);
		cout << n - dp[n][n] << endl;
	}
	return 0;
}