vijos p1311(单词接龙)
恩.......
DFS深度搜索+递归,主要是判断的问题(弄了比较久....),把每一次的字母数记录下来,找最大值;
代码如下.....感觉还是不错的......
program p1311; var s:array[1..21] of string; b:array[1..21] of longint; i,j,k,z,y,l,n,m,max:longint; ch,ch2:char; procedure haha(a:string;data:longint); var i,j,k,l,m,c,data2:longint; s2:string; function pan(x,y:string):longint; var i,j,k,l,lx,ly:longint; begin lx:=length(x); ly:=length(y); if(pos(copy(x,1,lx-ly),y)<>0)then pan:=0 else begin if lx>ly then l:=ly else l:=lx; i:=0; repeat inc(i) until (copy(x,lx-i+1,i)=copy(y,1,i))or(i>=l); if copy(x,lx-i+1,i)=copy(y,1,i)then pan:=i else pan:=0; end; end; {........................................................} begin if data>max then max:=data; for i:=1 to n do if (pan(a,s[i])<>0)and(b[i]<2) then begin c:=pan(a,s[i]); data2:=data+length(s[i])-c; l:=length(a); s2:=copy(a,1,l-c)+s[i]; inc(b[i]); haha(s2,data2); dec(b[i]); end; end; {========================================================} begin readln(n); for i:=1 to n do readln(s[i]); read(ch); z:=0;y:=1; for i:=1 to n do begin if s[i][1]=ch then begin inc(b[i]);haha(s[i],length(s[i]));dec(b[i]);end; end; write(max); end.