区间dp
HelloWorld10086
追随大神的脚步
展开
-
UVA 10739 String to Palindrome (区间dp)
题意:为给出一个字符串,现在可以进行3种操作(添加字母,删除字母,替换字母),将其变成回文串,求出最少的操作次数。 解析:用d[i][j]表示将第i到j之间的字串变成回文串的最小操作步数, 然后转移方程为 当s[i] != s[j]时,dp[i][j] = min( dp[i][j],d[i][j-1],d[i+1][j-1])+1; 当s[i] == s[j]时,dp[i][j] =原创 2015-01-29 17:07:06 · 609 阅读 · 0 评论 -
UVA 10304 Optimal Binary Search Tree (区间dp)
题目大意:二叉搜索树的左子树的节点一定比当前节点小,右子树的的节点一定比当前节点大。 要求建一棵二叉查找树,使得总的cost最低。 sum = f(e1)*cost(e1) + f(e2)*cost(e2) + ... + f(en)*cost(en) 解析:题目给的序列是从小到大的,那么对于这个序列的任意一个ei,设ei为根节点,我们可以知道在序列中ei左边的所有数会构成ei的左子树,原创 2015-01-29 17:14:06 · 643 阅读 · 0 评论 -
UVA 10617 Again Palindromes (区间dp)
题意:给你n个串(最长不超过60),问有多少种删去字符的方法使剩下的字符成为一个回文子串。 解析: 设dp[l][r]为从l到r有多少个回文串。 当str[l] != str[r]时,我们要考虑(l+1,r)组成的回文串,(l,r-1)之间的回文串,但是两者都会计算(x+1,y-1)的回文串数,所以要减去(x+1,y-1)的回文串数, dp[l][r] = dp[l+1][r] + d原创 2015-01-29 17:29:49 · 542 阅读 · 0 评论 -
UVA 10453 Make Palindrome(区间dp-补全回文串+打印结果)
题目大意:给一个字符串,要求添加最少个字符,把它变成回文串,并输出。 思路: 区间dp,dp[i][j] 表示区间(i, j) 内的字符串添加的最少个数, 变成回文串那么, 如果str[i]==str[j], dp[i][j] = dp[i+1][j-1] + 1 否则dp[i][j] = min{dp[i+1][j], dp[i][j-1]} + 1; 题目要输出方案,那么只要原创 2015-02-04 10:34:25 · 863 阅读 · 0 评论 -
UVa 11151 - Longest Palindrome(区间dp)
题意: 求一个字符串任意去掉零个或多个字符后,中最长的回文串的长度。解法: 由于是求长度,所以我们可用状态方程: d[i][j]表示在区间i~j内的最大回文子串,边界条件为d[i][i] = 1; d[i][j] = d[i+1][j-1]+2; str[i] == str[j] d[i][j] = max(d[i+1][j], d[i][j-1]); str[i] != str[j]注意原创 2015-02-14 18:22:06 · 537 阅读 · 0 评论