#include #include #define LgMax 100 #define nin "0.in" #define nout "0.out" char s[LgMax + 1]; int Lg; int rez; FILE *file; void citire(void) { file = fopen(nin,"rt"); fscanf(file,"%s",s); Lg = strlen(s); fclose(file); } int palindrom(int inceput,int sfarsit) { while (inceput < sfarsit) { if (s[inceput] != s[sfarsit]) return 0; ++inceput; --sfarsit; } return 1; } void dinamic(void) { int i,j; int nrp[LgMax]; int nrmin; for (i=0; i < Lg; ++i) if (palindrom(0,i)) nrp[i] = 1; else { nrmin = LgMax+2; for (j = 0;j < i;++j) if (palindrom(j+1, i) && nrp[j] < nrmin) nrmin = nrp[j]; nrp[i] = nrmin + 1; } rez = nrp[Lg - 1]; } void afisare(void) { file = fopen(nout,"wt"); fprintf(file,"%d\n",rez); fclose(file); } int main(void) { citire(); dinamic(); afisare(); return 0; }