演算法:搜尋
這道題花的時間不少,一言蔽之都是錯在小的細節上了,因此對於這些細節一定要注意!
我們首先可以根據讀入的字串求出任意兩個字串之前的關係,用d[i,j]表示i字串連線j字串後新增加的長度,這裡還要注意會出現自己連線自己的特殊情況。(錯在這了半天的說)
然後就是簡單的dfs了,注意每個字串的使用次數是2,每個開頭是關鍵字母的字串都做一遍搜尋即可。
program vijos1311;
const
maxn=20;
var n,temlen,tot,ans:longint;
s:array [0..maxn] of string;
b:array [0..maxn,0..maxn] of boolean;
d:array [0..maxn,0..maxn] of longint;
len,v,start,vv:array [0..maxn] of longint;
procedure init;
var i,j,k,l:longint;
t:boolean;
x,y:string;
ch:char;
begin
ans:=0;
tot:=0;
readln(n);
for i:=1 to n do
begin
readln(s[i]);
len[i]:=length(s[i]);
v[i]:=2;
end;
vv:=v;
readln(ch);
for i:=1 to n do
begin
if s[i,1]=ch then
begin
inc(tot);
start[tot]:=i;
end;
end;
for i:=1 to n do
begin
for j:=1 to n do
begin
t:=false;
if len[i]>=len[j] then k:=len[j] else k:=len[i];
if s[i]<>s[j] then
begin
for l:=1 to k do
begin
x:=copy(s[i],len[i]-l+1,len[i]);
y:=copy(s[j],1,l);
if x=y then
begin
t:=true;
temlen:=l;
break;
end;
end;
end;
if s[i]=s[j] then
begin
for l:=1 to (len[i] shr 1) do
begin
x:=copy(s[i],1,l);
y:=copy(s[j],len[j]-l+1,len[j]);
if x=y then
begin
t:=true;
temlen:=l;
break;
end;
end;
end;
if t then
begin
b[i,j]:=true;
d[i,j]:=len[j]-temlen;
end;
end;
end;
end;
procedure dfs(st,maxlen:longint);
var i:longint;
begin
if maxlen>ans then ans:=maxlen;
for i:=1 to n do
begin
if (b[st,i]) and (v[i]>0) then
begin
dec(v[i]);
dfs(i,maxlen+d[st,i]);
inc(v[i]);
end;
end;
end;
procedure main;
var i:longint;
begin
for i:=1 to tot do
begin
v:=vv;
v[start[i]]:=1;
dfs(start[i],len[start[i]]);
end;
end;
begin
assign(input,'vj1311.in'); reset(input);
assign(output,'vj1311.out'); rewrite(output);
init;
main;
writeln(ans);
close(input); close(output);
end.
1018 單詞接龍
題目描述 description 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如beast和astonish,如果接成一條龍則變為beast...
1220 單詞接龍
題目 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部分...
zufeoj 單詞接龍
單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部分不能存...