一句话题意:每个字母添加和删除都相应代价(可以任意位置 增加/删除),求把原串变成回文串的最小代价 Description 保持对所有奶牛的跟踪是一项棘手的任务,因此农场主约翰已经安装了一个系统来实现自动化.他在每头奶牛身上安装了一个电子ID标签,系统将在奶牛经过扫描仪时读取.每个ID标记是从字母表中提取的一个字符串. 奶牛,它们是淘气的动物,有时试图通过倒着走来欺骗系统.如果一头奶牛的ID是“abcba”,那么无论她怎么走,它都能读到同样的东西,而拥有“abcb”的奶牛可能会注册为两个不同的I…
个人心得:动态规划真的是够烦人的,这题好不容易写出了转移方程,结果超时,然后看题解,为什么这些题目都是这样一步一步的 递推,在我看来就是懵逼的状态,还有那个背包也是,硬是从最大的V一直到0,而这个就是从把间距为1到ch.size()全部算出来,难道 这就是动态规划,无后效性,即每一步都是最优的状态,所以把所有状况全部解决然后就可以一步一步往后面推了??值得深思 网上题解: 分析:我们知道求添加最少的字母让其回文是经典dp问题,转化成LCS求解.这个是一个很明显的区间dp 我们定义dp [ i ]…
Cheapest Palindrome 直接翻译了 Descriptions 给定一个字符串S,字符串S的长度为M(M≤2000),字符串S所含有的字符的种类的数量为N(N≤26),然后给定这N种字符Add与Delete的代价,求将S变为回文串的最小代价和. Input 第一行:两个由空格分隔的整数 N 和 M 第二行:这一行给出了恰好 M 个字符,表示初始状态下的ID字符串 接下来的 N 行:每一行给出了由空格分隔的三部分.首先是一个字符,保证出现在了输入的字符串中.接下来是两个整数,表示你增…
Cheapest Palindrome Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7148   Accepted: 3452 Description Keeping track of all the cows can be a tricky task so Farmer John has installed a system to automate it. He has installed on each cow a…
Cheapest Palindrome Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10943   Accepted: 5232 Description Keeping track of all the cows can be a tricky task so Farmer John has installed a system to automate it. He has installed on each cow…
题目链接:http://poj.org/problem?id=3280 题目大意:给你一个字符串,你可以删除或者增加任意字符,对应有相应的花费,让你通过这些操作使得字符串变为回文串,求最小花费.解题思路:比较简单的区间DP,令dp[i][j]表示使[i,j]回文的最小花费.则得到状态转移方程: dp[i][j]=min(dp[i][j],min(add[str[i]-'a'],del[str[i]-'a'])+dp[i+1][j]); dp[i][j]=min(dp[i][j],min(add[…
dp[i][j]表示将字符串子区间[i,j]转化为回文字符串的最小成本. 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #include<cmath> 5 #include<string> 6 #include<iostream> 7 using namespace std; 8 const int maxn=2010; 9 int n,m,dp[maxn…
Keeping track of all the cows can be a tricky task so Farmer John has installed a system to automate it. He has installed on each cow an electronic ID tag that the system will read as the cows pass by a scanner. Each ID tag's contents are currently a…
dp[i][j]表示处理完i到j的花费,如果s[i] == s[j] 则不需要处理,否则处理s[i]或s[j], 对一个字符ch,加上ch或删掉ch对区间转移来说效果是一样的,两者取min. #include<cstdio> #include<iostream> #include<string> #include<cstring> #include<queue> #include<vector> #include<stack&g…
<题目链接> 题目大意: 一个由小写字母组成的字符串,给出字符的种类,以及字符串的长度,再给出添加每个字符和删除每个字符的代价,问你要使这个字符串变成回文串的最小代价. 解题分析: 一道区间DP的好题.因为本题字符串的长度最大为2e3,所以考虑$O(n^2)$直接枚举区间的两个端点,然后对枚举的区间进行状态转移,大体上有三种转移情况: $dp[l][r]$表示$[l,r]$为回文串的最小代价 对于区间$[l,r]$,当$str[l]==str[r]$时,$dp[l][r]=dp[l+1][r-…