动规问题,代码有误,求指教
回文词是一种对称的字符串。任意给定一个字符串,通过插入若干字符,都可以变成回文词。次题的任务是,求出将给定字符串变成回文词所需要插入的最少字符数。比如 “Ab3bd”插入2个字符后可以变成回文词“dAb3bAd”或“Adb3bdA”,但是插入少于2个的字符无法变成回文词。
注:此问题区分大小写
#include<iostream>
using namespace std;
const int Max_size = 5000;
char str[Max_size + 10];
int c[Max_size + 10][Max_size + 10];
int main()
{
int i,j,n;
cin>>n;
cin>>str;
i = 0;j = n-1;
while(i<n && j>=0)
{
if(i >= j)
{
c[i][j] = 0;
break;
}
else
{
if(str[i] == str[j])
c[i][j] = c[++i][--j];
else
{
int nlen1 = c[i+1][j] + 1;
int nlen2 = c[i][j-1] + 1;
if(nlen1 >= nlen2)
{
c[i][j] = nlen2;
j--;
}
else
{
c[i][j] = nlen1;
i++;
}
}
}
}
cout<<c[0][n-1];
}