#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
#define N (int)(2e3+15)
int n,m;
char s[N],ch;
int v[32],dp[N][N];
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
// freopen("check.in","r",stdin);
// freopen("check.out","w",stdout);
cin >> m >> n >> (s+1);
for(int i=1,a,b; i<=m; i++)
{
cin >> ch >> a >> b;
v[ch-'a']=min(a,b);
}
memset(dp,0x3f,sizeof(dp));
for(int i=1; i<=n; i++) dp[i][i]=0;
for(int len=2; len<=n; len++)
for(int i=1,j=i+len-1; j<=n; i++,j++)
{
dp[i][j]=min(dp[i+1][j]+v[s[i]-'a'],dp[i][j-1]+v[s[j]-'a']);
if(s[i]==s[j])
{
if(len==2)dp[i][j]=0;
else dp[i][j]=min(dp[i][j],dp[i+1][j-1]);
}
}
cout << dp[1][n] << endl;
return 0;
}
P2890 [USACO07OPEN] Cheapest Palindrome G
最新推荐文章于 2024-07-25 09:48:00 发布