POJ 3280

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
int n,m,ad[26],de[26],f[2005][2005];
char s[2005];
int main()
{
	while(~scanf("%d%d",&n,&m))
	{
		scanf("%s",s);
		for(int i=1;i<=n;i++)
		{
			char c;
			scanf(" %c",&c);
			scanf("%d%d",&ad[c-'a'],&de[c-'a']);
		}
		for(int k=1;k<=m;k++)
		{
			for(int i=0;i<m;i++)
			{
				int j=i+k-1;
				if(k==1)f[i][j]=0;
				else
				{
					f[i][j]=min(f[i+1][j]+de[s[i]-'a'],f[i][j-1]+de[s[j]-'a']);
					f[i][j]=min(f[i][j],f[i+1][j]+ad[s[i]-'a']);
					f[i][j]=min(f[i][j],f[i][j-1]+ad[s[j]-'a']);
					if(s[i]==s[j])f[i][j]=min(f[i][j],f[i+1][j-1]);
				}
			}
		}
		printf("%d\n",f[0][m-1]);
	}
	return 0;
}