摘要: 问题给定一个长度为n(<=5000)的字符串,求最少添加几个字符使之变成回文串分析设原序列S的逆序列为S',则这道题目的关键在于,最少需要补充的字母数= 原序列S的长度— S和S'的最长公共子串长度设 S 为原字符串,RS=reverse(S)即S反转后的字符串,LCS(S,RS)为S与RS的最长公共子序列,len(S)为S的长度。令S={a1~an},则RS={an~a1},S-LCS(S,RS)={b1~bn},这里的集合都是有序、元素可重复的;bi∈S,RS;且i≠j时,bi≠bj,否则有bi∈LCS(S,RS);同时LCS(S,RS)一定是回文,因为其是在S的正序 阅读全文
posted @ 2011-06-27 17:30 liukee 阅读(425) 评论(0) 推荐(1) 编辑
摘要: 问题给定你两个基因序列,每个序列中只包含’AGCT’四种字符,长度不一定相等,每个序列都可以在任意位置添上‘-’使之边长,最后使两个序列变成等长,之后相应位置上的字符相互对应可以得到一个分数,现在给出不同的对应得到的分数,规定不使'-’对应。让你求出能够得到的最大的分数。分析很像lcs问题,可以根据lcs写出这样的方程:f[i,j]:=max{f[i-1,j-1]+match(s1[i],s2[j]),f[i-1,j]+match(s1[i],’-’),f[i,j-1]+match(‘-’,s2[j])};怎样来考虑这个问题呢?现在第一个字符串的前i位和第二个串的前j位的最值,之和当前 阅读全文
posted @ 2011-06-27 17:18 liukee 阅读(317) 评论(0) 推荐(0) 编辑