hdu 1243 反恐训练营--LCS

/*
	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;
}

 

你可能感兴趣的:(ini,2010)