COUNTPL - Đếm số Palindrome

Tác giả: flashmt

Ngôn ngữ: Pascal

uses math;
var s:string;
    i,j,n:longint;
    f:array[0..255] of longint;
    d:array[0..255,0..255] of boolean;

begin
     readln(s);
     n:=length(s);
     for i:=1 to n do d[i,i]:=true;
     for i:=1 to n-1 do
         if s[i]=s[i+1] then d[i,i+1]:=true;
     for j:=3 to n do
         for i:=1 to n-j+1 do
             d[i,i+j-1]:=d[i+1,i+j-2] and (s[i]=s[i+j-1]);
     for i:=1 to n do f[i]:=300;
     for i:=1 to n do
         for j:=0 to i-1 do
             if d[j+1,i] then f[i]:=min(f[i],f[j]+1);
     writeln(f[n]);
end.

Download