poj1159

来源:互联网 发布:软件买卖平台 编辑:程序博客网 时间:2024/05/20 06:54

【题意】

给定一个长度为n(n<=5000)的字符串,求最少加入多少个字符可以使他变为回文串

【输入】

第一行一个n

接下来一行n个字符表示字符串

【输出】

一个数字,表示最少加入多少个字符可以使他变为回文串


将原串反过来求两串的最长公共子序列

然后拿n减去即可


program poj1159;var  n,i,j,k,o:longint;  s1,s2:ansistring;  f:array [0..1,0..5001] of longint;begin  readln(n);  readln(s1);  for i:=1 to n do    s2:=s2+s1[n-i+1];  fillchar(f,sizeof(f),0);  o:=0;  for i:=1 to n do    begin      o:=1-o;      for j:=1 to n do        begin          f[o,j]:=f[1-o,j];          if f[o,j]<f[o,j-1] then f[o,j]:=f[o,j-1];          if (s1[i]=s2[j])and(f[o,j]<f[1-o,j-1]+1) then f[o,j]:=f[1-o,j-1]+1;        end;    end;  writeln(n-f[o,n]);end.


原创粉丝点击