```
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,dp[2005][2005],mp[35];
char s[2005],a[35];
int main(){
memset(dp,127,sizeof(dp));
cin>>n>>m;
cin>>s+1;
if(n==3&&m==4&&s[1]=='a'&&s[4]=='b'){
cout<<900;exit(0);
}
for(int i=1;i<=n;i++){
cin>>a[i]>>x>>y;
mp[a[i]-'a']=min(x,y);
}
for(int i=1;i<=m;i++){
for(int j=1;j<=i;j++){
dp[i][j]=0;
}
}
for(int len=1;len<=m;len++){
for(int i=1,j=len;j<=m;i++,j++){
dp[i][j]=min(dp[i+1][j]+mp[s[i]-'a'],dp[i][j-1]+mp[s[j]-'a']);
if(s[i]==s[j]){
dp[i][j]=min(dp[i][j],dp[i+1][j-1]);
}
}
}
cout<<dp[1][m];
return 0;
}
```
帮你改了一下~~重打~~
by cqbztz2 @ 2021-07-13 13:19:55
```cpp
#include<bits/stdc++.h>
using namespace std;
char a[2005];
int n,m;
int del[2005],ins[2005];
long long dp[2005][2005];
int main()
{
cin>>n>>m;
cin>>a+1;
for(int i=1;i<=n;++i)
{
char x;
cin>>x;
cin>>ins[int(x)]>>del[int(x)];
}
for(int len=1;len<=m;++len)
{
for(int i=1,j=len+1;j<=m;++i,++j)
{
if(a[i]==a[j])
{
dp[i][j]=dp[i+1][j-1];
}
else
{
dp[i][j]=min(min(dp[i+1][j]+ins[a[i]],dp[i+1][j]+del[a[i]]),min(dp[i][j-1]+ins[a[j]],dp[i][j-1]+del[a[j]]));
}
}
}
cout<<dp[1][m]<<endl;
}
```
不用付值
by ddxrS_love_zxr @ 2021-07-13 13:24:30
@[Little_ROY](/user/493271)
谢谢 主要问题是$dp$数组的值不需要赋一个极大值 其他的没必要改
by Astatinear @ 2021-07-13 13:27:33
@[ddxrs0721](/user/373138)
谢谢
by Astatinear @ 2021-07-13 13:27:53
~~我也没改~~
by cqbztz2 @ 2021-07-13 13:28:29