poj 3280 Cheapest Palindrome

http://poj.org/problem?id=3280

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define maxn 2000010
 5 using namespace std;
 6 
 7 char str[maxn],ch;
 8 int a[maxn];
 9 int n,m;
10 int dp[2020][2020];
11 
12 int main()
13 {
14     while(scanf("%d%d",&n,&m)!=EOF)
15     {
16         getchar();
17         scanf("%s",str);
18         getchar();
19         int x,y;
20         for(int i=0; i<n; i++)
21         {
22             scanf("%c %d%d",&ch,&x,&y);
23             a[ch-'a']=min(x,y);
24             getchar();
25         }
26         for(int i=m-1; i>=0; i--)
27         {
28             for(int j=i+1; j<m; j++)
29             {
30                 if(str[i]==str[j]) dp[i][j]=dp[i+1][j-1];
31                 else dp[i][j]=min(dp[i+1][j]+a[str[i]-'a'],dp[i][j-1]+a[str[j]-'a']);
32             }
33         }
34         printf("%d\n",dp[0][m-1]);
35     }
36     return 0;
37 }
View Code

 

posted @ 2014-06-22 11:05  null1019  阅读(116)  评论(0编辑  收藏  举报