POJ 3280--Cheapest Palindrome
2014-12-02 11:29
267 查看
题意:给定一字符串,可以在任何位置删除或者添加字符,使得字符串变为回文字符。但是每次操作的代价不同,问最小的代价。
题解:类似于POJ 1159。因为从a[i]到a[j]的子串变成的最少代价回文字符串头尾是a[i]或者a[j]或者都不是。
设dp[i][j]为从a[i]到a[j]组成的子串变成回文字符串的最小花费。
转移方程:如果 a[i] = a[j] ,dp[i][j] = dp[i+1][j-1];否则,dp[i][j] = min{dp[i+1][j]+cost[i],dp[i][j-1]+cost[j]}。其中cost为删除或者添加字符的较小值。
题解:类似于POJ 1159。因为从a[i]到a[j]的子串变成的最少代价回文字符串头尾是a[i]或者a[j]或者都不是。
设dp[i][j]为从a[i]到a[j]组成的子串变成回文字符串的最小花费。
转移方程:如果 a[i] = a[j] ,dp[i][j] = dp[i+1][j-1];否则,dp[i][j] = min{dp[i+1][j]+cost[i],dp[i][j-1]+cost[j]}。其中cost为删除或者添加字符的较小值。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; class solve { private: char* initID; int N,M; int cost[26]; int* minCost[2]; public: solve(int n,int m):N(n),M(m) { processIn(); dp(); } ~solve() { delete[] initID; delete[] minCost[0]; delete[] minCost[1]; } int processIn(); int dp(); }; int solve::dp() { int i,j; char flag = 0; for(i = 0;i < 2;i++) { minCost[i] = new int[M]; memset(minCost[i],0,sizeof(int)*M); } for(i = M-1;i >= 0;i--) { for(j = i+1;j < M;j++) { if(initID[i] == initID[j]) { minCost[!flag][j] = minCost[flag][j-1]; } else { minCost[!flag][j] = min(minCost[flag][j]+cost[initID[i]-'a'],minCost[!flag][j-1]+cost[initID[j]-'a']); } } flag = !flag; } printf("%d\n",minCost[flag][M-1]); return 0; } int solve::processIn() { char c; int cost1,cost2; initID = new char[M+1]; scanf("%s",initID); while(N--) { getchar(); scanf("%c%d%d",&c,&cost1,&cost2); cost[c-'a'] = min(cost1,cost2); } return 0; } int main() { int n,m; while(~scanf("%d%d",&n,&m)) { solve poj_3280(n,m); } return 0; }
相关文章推荐
- poj 3280 Cheapest Palindrome
- poj 3280 Cheapest Palindrome
- POJ 3280 Cheapest Palindrome
- Poj 3280 Cheapest Palindrome【区间dp】
- 刷题——Cheapest Palindrome POJ - 3280
- POJ 3280 Cheapest Palindrome 动态规划法题解
- POJ_3280_Cheapest_Palindrome_(动态规划)
- (中等) POJ 3280 Cheapest Palindrome,DP。
- 【poj 3280】 Cheapest Palindrome 题意&题解&代码(C++)
- poj 3280 Cheapest Palindrome
- POJ 3280 Cheapest Palindrome
- POJ 3280 Cheapest Palindrome
- Cheapest Palindrome.(POJ-3280)
- POJ-3280 Cheapest Palindrome 动态规划求回文串
- Poj 3280 Cheapest Palindrome
- poj 3280 Cheapest Palindrome
- POJ-3280 Cheapest Palindrome 区间DP
- poj3280 Cheapest Palindrome
- POJ 3280 Cheapest Palindrome [DP]
- poj-3280-Cheapest Palindrome