最长公共子串的变形
#include <bits/stdc++.h>
using namespace std;
int ch[1000];
int d[2005][2005];
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
char cc;int a;
memset(ch,0,sizeof(ch));
for (int i=0;i<n;i++){
//scanf("%c%d",&cc,&a);
cin>>cc>>a;
ch[cc]=a;
}
char s1[2005],s2[2005];
scanf("%s%s",s1,s2);
int len1=strlen(s1);
int len2=strlen(s2);
memset(d,0,sizeof(d));
for (int i=1;i<=len1;i++){
for (int s=1;s<=len2;s++){
if (s1[i-1]-s2[s-1]==0){
d[i][s]=max(d[i][s],d[i-1][s-1]+ch[s1[i-1]]);
} else d[i][s]=max(d[i-1][s],d[i][s-1]);
}
}
printf("%d\n",d[len1][len2]);
}
return 0;
}