您的位置:首页 > 其它

UVA 10453 - Make Palindrome(DP)

2012-07-19 17:23 260 查看
题目链接

今天多校第一场,我酱油了。。。哎,最近做DP,完全没有感觉啊,这个破题,C RE无数次,用C++过了。。。好假。。

记录路径的本身 和逆序的最长公共子序。

#include <stdio.h>
#include <string.h>
int p[1001][1001];
int main()
{
char str[3001];
int i,j,len;
while(gets(str)!=0)
{
memset(p,0,sizeof(p));
len = strlen(str);
for(i = 1; i <= len; i ++)
{
for(j = 1; j <= len; j ++)
{
if(str[i-1] == str[len-j])
p[i][j] = p[i-1][j-1]+1;
else if(str[i-1] != str[len-j])
{
if(p[i-1][j] < p[i][j-1])
p[i][j] = p[i][j-1];
else
p[i][j] = p[i-1][j];
}
}
}
printf("%d ",len-p[len][len]);
for(i = len,j = len;;)
{
if(str[i-1] == str[len-j]&&i >= 1&&j >=1)
{
printf("%c",str[i-1]);
i --;j --;
}
else if(p[i][j] == p[i][j-1]&&j >= 1)
{
printf("%c",str[len-j]);
j --;
}
else if(p[i][j] == p[i-1][j]&&i >= 1)
{
printf("%c",str[i-1]);
i --;
}
else if(i == 0&&j == 0)
break;
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: