1754: [搜索][回溯][递归]奶牛的DNA

文件提交:无需freopen 内存限制:128 MB 时间限制:1.000 S
评测方式:普通裁判 命题人:
提交:0 解决:0

题目描述

 Farmer John最近弄到了奶牛贝茜的DNA序列。象我们熟知的那样,贝茜的DNA
序列是一个由字母'A','C','G','T'组成的字符串。

    在普通的DNA测试中,我们一般得到的只是DNA的片段,而不是整个序列。比如
说,形如'GATTA'和'TACA'的两个片段,很可能是对总序列'GATTACA'进行两次测试
后得到的。在对DNA序列的多次测试后,得到的片段两两之间可能有一定的重复。

    合并两个片段,需要找到这两个片段的最长重复子串,删掉其中的一个后把两
个片段首尾相连。如果某个串完整地出现在某个片段的尾部与另一个片段的开始部
分,我们就称它为这两个片段的重复子串。注意,出现在某个片段中间的串不可能
成为重复子串。

    比如说,片段'GATTACA'和'TTACA'的重复子串就是'TTACA',而序列'GATTACA'
和'TTA'就没有重复子串,因为'TTA'出现在'GATTACA'的中间,不是开头或者末尾。
以下是一些片段合并的例子,其中包括没有重复子串的情况。

    GATTA + TACA -> GATTACA
    TACA + GATTA -> TACAGATTA
    TACA + ACA -> TACA
    TAC + TACA -> TACA
    ATAC + TACA -> ATACA
    TACA + ACAT -> TACAT

    我们的任务是:对于给出的N(2<=N<=7)个长度不超过7个字符的DNA片段,求出
它们首尾相连所形成的总序列的最短长度。所有的片段都必须被接入总序列。

程序名: dna
 

输入

输入格式:

* 第1行: 只有一个整数N,表示DNA片段的总数

* 第2..N+1行: 每行是一个DNA片段的具体描述

输出

输出格式:

* 第1行: 输出只有一个整数,表示所有片段按某种顺序首尾接在一起所得DNA总
         序列的最小长度。

样例输入

4
GATTA
TAGG
ATCGA
CGCAT

样例输出

13

提示

最短的总序列是"CGCATCGATTAGG"。

来源/分类