您的位置:首页 > 其它

PKU 1159 Palindrome

2009-09-01 10:33 357 查看
http://acm.pku.edu.cn/JudgeOnline/problem?id=1159

#include<stdio.h>
char str[5001];
short int data[5005][5005] = {0};//这里用int 会超内存
int main()
{

int len;
long max = 0,i ,j;

scanf("%d%s",&len,str);
//len = strlen(str1);
for(i = 0;i < len ;i++)
{
for(j = 0;j< len-i;j++)
{
if(i == 0)
data[j][j+1] = 0;
else if(i == 1)
{
if(str[j] == str[j+1])
data[j][j+i] = 0;
else
data[j][j+i] = 1;

}
else
{
if(str[j] == str[j+i])
data[j][j+i] = data[j+1][j+i-1];
else
data[j][j+i] = (data[j][j+i-1]<data[j+1][j+i]?data[j][j+i-1]:data[j+1][j+i]) + 1;
}
}
}

printf("%d",data[0][len-1]);

return 0;
}


简单的DP 从长度为一开始 到 len 一步一步过来 最后得到结果 既是

还有一个想法是用轮换数组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: