bzoj1032: [JSOI2007]祖码Zuma

传送门

水题一道

我们可以先将珠子按照颜色分段

然后分多种情况转移。

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.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值