您的位置:首页 > 其它

pku 1159 Palindrome

2009-05-11 10:35 281 查看
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <utility>
#pragma warning (disable: 4996)
using namespace std;
char s1[5003], s2[5003];
int dp[2][5003];
int main()
{
int len;
while(scanf("%d%s", &len, &s1) != EOF)
{
for(int i = 0; i < len; ++i)
s2[i] = s1[len-i-1];
s2[len] = '/0';

for(int i = 0; i <= len; ++i)
dp[0][i] = i;

int k = 0;
for(int i = 1; i <= len; ++i)
{
dp[1-k][0] = i;
for(int j = 1; j <= len; ++j)
{
if(s1[i-1] != s2[j-1])
dp[1-k][j] = min(dp[1-k][j-1], dp[k][j]) + 1;
else
dp[1-k][j] = dp[k][j-1];
}
k = 1-k;
}
printf("%d/n", dp[k][len]/2);
}
return 0;
}

//居然多组数据,受不了了,调了半小时....
//以后不管有没有提示,一定要写上while(scanf())!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: