poj 3280 Cheapest Palindrome
2011-07-22 20:17
369 查看
//参照poj1 1159 Palindrome // 题意:对一字符串增加或删除字符来使其变成回文字符串,而增加或删除字符都有一个花费, // 求解使该字符串变成回文串需要的最小花费. #include <iostream> // DP + 滚动数组 #include <string> using namespace std; #define MAXN 2005 int ans[2][MAXN]; int main() { int n,m; char s[MAXN]; scanf("%d%d%s",&m,&n,s); char ch[2]; int a,b,cost[30]; while(m--) { scanf("%s%d%d",ch,&a,&b); cost[ch[0]-'a']=min(a,b); } for (int i=n-1;i>=0;--i) // 注意i是从大到小,因为求解ans[i][j]过程需要先知道ans[i+1][j] { for (int j=i+1;j<n;++j) { int t1= cost[s[i]-'a'] + ans[(i+1)%2][j] ; int t2= cost[s[j]-'a'] + ans[i%2][j-1] ; if (s[i] == s[j]) ans[i%2][j] = min ( ans[(i+1)%2][j-1] , min ( t1 , t2 ) ); else ans[i%2][j] = min ( t1 , t2 ); } } printf("%d\n",ans[0][n-1]); //相当于ans[0%2][n-1] return 0; }
相关文章推荐
- POJ 3280 Cheapest Palindrome
- poj 3280 Cheapest Palindrome【区间DP】
- POJ 3280 Cheapest Palindrome【DP之经典回文问题】
- poj-3280-Cheapest Palindrome
- POJ 3280 Cheapest Palindrome【DP之经典回文问题】
- poj 3280 Cheapest Palindrome
- POJ 3280 Cheapest Palindrome【DP】
- poj3280 Cheapest Palindrome
- poj 3280 Cheapest Palindrome
- POJ3280 Cheapest Palindrome
- POJ 3280 Cheapest Palindrome
- Poj 3280 Cheapest Palindrome【区间dp】
- poj 3280 Cheapest Palindrome
- poj3280 Cheapest Palindrome
- POJ_3280_Cheapest_Palindrome_(动态规划)
- [区间dp 构建回文串] Cheapest Palindrome POJ - 3280
- Cheapest Palindrome (poj 3280 区间DP)
- 【poj 3280】 Cheapest Palindrome 题意&题解&代码(C++)
- POJ 3280 Cheapest Palindrome
- poj 3280 Cheapest Palindrome