摘要:
题意:插入字符来得到回文串,求插入字符最小数目思路:递归方程dp[i][j], 下来三者的最小值:如果str[i] 等于 str[j] 时 dp[i+1][j-1]; dp[i+1][j] + 1(在str[j]后面插入一个与str[i]相同的字符); dp[i][j-1] +1(在str[i]前面插入一个与str[j]相同的字符)。子问题填表,从(0,0)到(n, n)对角线向上填。代码:[代码... 阅读全文
摘要:
题意:在二维数组中找最长的下降序列,可以向上、下、左、右,四个方向走思路:len[i][j] = max{上,下,左,右},还需要考虑height[i][j]与上下左右的关系。 这个方程的子问题填表方式有两种:一是,迭代方式,用一个结构体记录height[i][j]、i、j,然后对高度排序,然后从小到大填表,这样就能保证填len[i][j]时,其上下左右如果不比 height[i][j]大则... 阅读全文
摘要:
题意:计算两个DNA碱基序列的相似度,可以插入空格来匹配任一个碱基,题目中给了任意匹配的代价。思路:score[i][j]为下列三者的最大值:seq1[i]与seq2[j]匹配 + score[i-1][j-1];空格与seq1[i]匹配 + score[i-1][j];空格与seq2[j]匹配 + score[i][j-1]。初值,score,第一列表示一直用空格匹配第一个序列,第一行表示一直用... 阅读全文
摘要:
题意很简单:求一个矩阵中子矩阵元素和的最大值。 思路:穷举任意两行,对这两行的列和求最大子段。最大子段递归方程:s[k] = (s[k-1]>0) ? (s[k-1]+ a[k]) : a[k]。s[k]表示以a[k]结尾的最大子段和,方程式的意思是,如果s[k-1]>0则以a[k]结尾的最大子段包括前面的子段,否则以a[k]结尾的最大子段就是它本身。 代码:[代码] while (... 阅读全文