0
0
已采纳
裸的dfs
function pd(s1,s2:string):longint;//两个字符串连接的长度计算
var
max,i:longint;
s:string;
begin
max:=10000000;
for i:=1 to length(s1) do
begin
s:=copy(s1,i,length(s1)-i+1);
if(pos(s,s2)=1)and(length(s)<max) then max:=length(s);
end;
if(max=10000000) then exit(-1);
exit(length(s2)-max);
end;
procedure search(t,sum:longint;ss,s1:string);//搜索回溯核心代码
var
i:longint;
begin
if(sum>ans) then ans:=sum;
for i:=1 to n do
if(b[i]<2)and(pos(s[i],s1)=0)and(pd(s1,s[i])<>-1)or(t=1)and(s[i][1]=ss[1]) then
begin
inc(b[i]);
if(t<>1) then search(t+1,sum+pd(s1,s[i]),ss+s[i],s[i])
else search(t+1,length(s[i]),ss+s[i],s[i]);
dec(b[i]);
end;
end;
0