poj 3280 回文字符串问题 dp算法
Posted xuxiaojin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj 3280 回文字符串问题 dp算法相关的知识,希望对你有一定的参考价值。
题意:给一个字符串,构成回文(空也是回文) 其中增删都需要代价。问:代价最少?
思路:把字符串s变空 dp[i][j]表示变成回文的最小代价
for(i=m-1;i>=0;--i)
for(j=i+1;i<w;j++)lsdjfl
dp[i][j]=min(dp[i+1][j]+cost[s[i]-‘a‘]],dp[i][j-1]+cost[s[j]-‘a‘])
if(s[i]==s[j]) dp[i][j]=min(dp[i][j],dp[i+1][j-1])
其中cost表示增删中最小代价
解决问题的代码:
#include <iostream> #include <string> #include <algorithm> #include <cstdio> using namespace std; int dp[2048][2048]; int cost[48]; int main() { int n, m; cin >> n >> m; string s; cin >> s; for (int i = 0; i < n; i++) { int add, del; char c; cin >> c >> add >> del; cost[c - ‘a‘] = min(add, del); } for(int i=m-1;i>=0;--i) for (int j = i + 1; j < m; j++) { dp[i][j] = min(dp[i + 1][j] + cost[s[i] - ‘a‘], dp[i][j - 1] + cost[s[j] - ‘a‘]); if (s[i] == s[j]) dp[i][j] = min(dp[i][j], dp[i + 1][j - 1]); } printf("%d ", dp[0][m - 1]); return 0; }
以上是关于poj 3280 回文字符串问题 dp算法的主要内容,如果未能解决你的问题,请参考以下文章
POJ 3280 Cheapest Palindrome(区间DP求改成回文串的最小花费)
[poj]3280 Cheapest Palindrome 题解
POJ3280 Cheapest Palindrome回文+DP