poj 3280 Cheapest Palindrome 区间dp

来源:互联网 发布:c语言return 0的用法 编辑:程序博客网 时间:2024/06/08 03:45

题意:

给添加和删除每个字符的代价,求将一个字符串变成回文串的最小代价。

分析:

区间dp,采用了备忘录方法。

代码:

//poj 3280//sep9#include<iostream>using namespace std;const int maxN=2048;int n,m;int dp[maxN][maxN];char s[maxN];int add_cost[256],del_cost[256];int rec(int x,int y){if(dp[x][y]!=-1)return dp[x][y];if(x>=y)return dp[x][y]=0;if(s[x]==s[y])return dp[x][y]=rec(x+1,y-1);int p=min(add_cost[s[x]],del_cost[s[x]])+rec(x+1,y); int q=min(add_cost[s[y]],del_cost[s[y]])+rec(x,y-1);return dp[x][y]=min(p,q);}int main(){scanf("%d%d",&n,&m);scanf("%s",s);while(n--){char c[8];int a,b;scanf("%s%d%d",c,&a,&b);add_cost[c[0]]=a;del_cost[c[0]]=b;}memset(dp,-1,sizeof(dp));printf("%d\n",rec(0,m-1));return 0;} 


0 0
原创粉丝点击