ACM dp Cheapest Palindrome

来源:互联网 发布:最新淘宝app官方下载 编辑:程序博客网 时间:2024/06/07 10:20

POJ 3280 Cheapest Palindrome



题目大意:(带入样例)给出3种字母,组成长度为4的字符串,增加一个a消耗1000,减少一个a消耗1100,以此类推,问删减各种字母后字符串变成回文最少消耗。

思路:在输入的时候比较增加和减少一个字母的消耗,把较小值存下来。(因为增加一个和减少一个,对于回文串 来说是一样的),然后用dp即可。

#include <stdio.h>#include <algorithm>using namespace std;int dp[2005][2005];int main(){int n,m,i,j,x,y,cost[30];char s[2005],c;scanf("%d%d",&n,&m);scanf("%s",s);for(i=0;i<n;i++){getchar();scanf("%c %d %d",&c,&x,&y);cost[c-'a']=min(x,y);}for(i=1;i<m;i++){for(j=i-1;j>=0;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\n",dp[m-1][0]);}


原创粉丝点击