|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define uchar unsigned char
char s[256], s2[256];
uchar a[255][255];
uchar i, j, k, N;
uchar min(uchar a,uchar b)
{
if (a < b)
return a;
else
return b;
}
int main(void)
{
uchar FORLIM, FORLIM1, FORLIM2;
gets(s);
*s2 = ' ';
sprintf(s2, "%c", s[0]);
FORLIM = strlen(s);
for (i = 2; i <= FORLIM; i++) {
if (s[i-1] != s[i-2])
sprintf(s2 + strlen(s2), "%c", s[i-1]);
}
strcpy(s, s2);
N = strlen(s);
FORLIM = N;
for (i = 1; i <= FORLIM; i++)
a[i-1][i-1] = 1;
FORLIM = N;
for (k = 1; k <= FORLIM - 1; k++) {
FORLIM1 = N - k;
for (i = 1; i <= FORLIM1; i++) {
if (s[i-1] != s[i + k - 1]) {
a[i-1][i + k - 1] = 255;
FORLIM2 = i + k;
for (j = i; j <= FORLIM2 - 1; j++)
a[i-1][i + k - 1] = min(a[i-1][i + k - 1], a[i-1][j-1] +
a[j][i + k - 1]);
} else {
a[i-1][i + k - 1] = a[i][i + k - 2] + 1;
FORLIM2 = i + k;
for (j = i + 1; j <= FORLIM2 - 1; j++) {
if (s[j-1] == s[i-1] &&
a[i-1][i + k - 1] > a[i][j-1] + a[j-1][i + k - 2] - 1)
a[i-1][i + k - 1] = a[i][j-1] + a[j-1][i + k - 2] - 1;
}
}
}
}
printf("%d\n", a[0][N-1]);
}
|
|