Pagini recente » Cod sursa (job #2544626) | Cod sursa (job #2198383) | Cod sursa (job #1853597) | Cod sursa (job #186141) | Cod sursa (job #780319)
Cod sursa(job #780319)
#include <stdio.h>
#include <string.h>
#define NMax 5010
const char IN[]="pali.in",OUT[]="pali.out";
int N;
int b[NMax][NMax];
int T[NMax];
char s[NMax];
inline int min(int x,int y){
return x<y ? x : y;
}
int main()
{
int i,j;
freopen(IN,"r",stdin);
scanf("%s",s+1);
fclose(stdin);
N=strlen(s+1);
for (i=1;i<=N;++i) T[i]=N;
for (i=1;i<=N;++i)
{
b[i][i]=true;
T[i]=min(T[i],T[i-1]+1);
for (j=1;i-j>0 && i+j<=N && b[i-j+1][i+j-1];++j) if (s[i-j]==s[i+j])
b[i-j][i+j]=true,
T[i+j]=min(T[i+j],T[i-j-1]+1);
if (i>1 && s[i]==s[i-1])
{
b[i][i-1]=true;
for (j=1;i-j>0 && i+j-1<=N && b[i-j+1][i+j-2];++j) if (s[i-j]==s[i+j-1])
{
b[i-j][i+j-1]=true;
T[i+j-1]=min(T[i+j-1],T[i-j-1]+1);
}
}
}
/*for (i=1;i<=N;++i) for (j=i;j>0;--j) if (b[j][i])
T[i]=min(T[i],T[j-1]+1);*/
freopen(OUT,"w",stdout);
printf("%d\n",T[N]);
fclose(stdout);
return 0;
}