/* LCS */ #include<stdio.h> #include<string.h> #define max(a,b) (a)>(b)?(a):(b) int n; char s1[2010],s2[2010]; int fen[2010],d[2010][2010]; int main() { int i,j,len1,len2; while(scanf("%d",&n)!=-1) { getchar(); gets(s1); for(i=0;i<n;i++) scanf("%d",&fen[s1[i]]);//原来写的是scanf("%d",&fen[s1[i]-'A'])(下面也是d[i][j]=d[i-1][j-1]+fen[s1[i]-'A'];); //结果错了,输入说是字母,那所有字母应该>=A,不会出错啊,谁看出来了,给回复一下 getchar(); gets(s1+1); gets(s2+1); len1=strlen(s1+1)+1; len2=strlen(s2+1)+1; for(i=0;1;i++) { if(i>len1&&i>len2) break; d[i][0]=0; d[0][i]=0; } for(i=1;i<=len1;i++) for(j=1;j<=len2;j++) if(s1[i]==s2[j]) d[i][j]=d[i-1][j-1]+fen[s1[i]]; else d[i][j]=max(d[i][j-1],d[i-1][j]); printf("%d\n",d[len1][len2]); } return 0; }