传送门
明显区间dp
f[i][j]表示i到j一段的最少涂色次数
枚举是直接修改还是两边组合。
uses math;
var
s:string;
f:array [0..55,0..55] of longint;
n,i,j,k,p:longint;
begin
readln(s); n:=length(s);
fillchar(f,sizeof(f),1);
for i:=1 to n do f[i,i]:=1;
for i:=2 to n do
for j:=1 to n-i+1 do
begin
if s[j]=s[j+i-1] then p:=0 else p:=1;
f[j,j+i-1]:=min(f[j,j+i-2],f[j+1,j+i-1])+p;
for k:=j to j+i-2 do f[j,j+i-1]:=min(f[j,j+i-1],f[j,k]+f[k+1,j+i-1]);
end;
write(f[1,n]);
end.