POJ3280 Cheapest Palindrome

来源:互联网 发布:韩国高考难度知乎 编辑:程序博客网 时间:2024/05/16 13:55
DP#include<cstdio>#include<iostream>#include<stdlib.h>#include<ctype.h>#include<algorithm>#include<cmath>#include<cstring>#include<queue>#include<iomanip>#include<set>#include<string>#include<iterator>#define maxn 10000000using namespace std;int N,M;int dp[2010][2010];int cost[30];string str;void solve(){    memset(dp,0,sizeof(dp));    for(int i=M-1;i>=0;i--)//  倒着来      for(int j=i;j<M;j++)         if(str[i]==str[j])//****//            dp[i][j]=dp[i+1][j-1];         else            dp[i][j]=min(dp[i+1][j]+cost[str[i]-'a'],dp[i][j-1]+cost[str[j]-'a']);}int main(){    while(cin>>N>>M){        cin>>str;        char c;        int a,b;        for(int i=0;i<N;i++){           cin>>c>>a>>b;           cost[c-'a']=min(a,b);        }        solve();       cout<<dp[0][M-1]<<endl;    }}