#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 一步一步過來 最后得到結果 既是
還有一個想法是用輪換數組


