您的位置:首页 > 其它

UVa 10739 - String to Palindrome

2013-08-27 10:28 671 查看
/*
DP:编辑距离
1.字符串为空或长度为1返回0
2.若子串为原串s的从i到j部分,记[i,j];
若s[i] == s[j], 则[i,j] = [i+1, j-1];
若不等 [i,j] = min([i+1,j-1], [i+1, j], [i, j-1]) + 1;
*/
#include <cstdio>
#include <cstring>
#include <cctype>
#include <algorithm>
using namespace std;
const int MAXN = 1004;
char s[MAXN];
int d[MAXN][MAXN];

int dp()
{
memset(d, 0, sizeof(d));
int len = strlen(s);
for(int l=2; l<=len; l++) {
for(int i=0; i<=len-l; i++) {
int j = i+l;
if(s[i] == s[j-1]) {
d[i][j] = d[i+1][j-1];
} else {
d[i][j] = min(d[i+1][j-1],
min(d[i+1][j], d[i][j-1])) + 1;
}
}
}
return d[0][len];
}

int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
int t;
scanf("%d\n", &t);
for(int i=1; i<=t; i++) {
gets(s);
printf("Case %d: %d\n", i, dp());
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: