水题一道
我们可以先将珠子按照颜色分段
然后分多种情况转移。
1.由两边合并而来。
2.吐珠子产生
然后自己脑补一下
还是很简单的。
var
a,b,jud:array [0..505] of longint;
f:array [0..505,0..505] of longint;
n,x,top,i,j,k:longint;
function min(x,y:longint):longint;
begin if (x<y) then exit(x) else exit(y); end;
begin
read(n,x); top:=1; a[1]:=x; b[1]:=1;
for i:=2 to n do begin
read(x);
if (x<>a[top]) then begin inc(top); a[top]:=x; b[top]:=1; end
else inc(b[top]);
end;
for i:=1 to top do if (b[i]=1) then jud[i]:=2 else jud[i]:=1;
fillchar(f,sizeof(f),1);
for i:=1 to top do f[i,i]:=jud[i];
for i:=2 to top do
for j:=1 to top-i+1 do
begin
if (a[j]=a[j+i-1]) then
if (b[j]+b[j+i-1]=2) then f[j,j+i-1]:=f[j+1,j+i-2]+1 else f[j,j+i-1]:=f[j+1,j+i-2];
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,top]);
end.