HDU 1243 反恐训练营 发表于 2011-08-02 | 分类于 文章归档 | 阅读次数: (其实还是用LCS的方法就可以了,考虑了好久,起初在数据输入地方就搞错了 T_T) Max_Score[i][j]: 当第i颗子弹对付第j个恐怖分子的最大得分 123456789101112131415161718192021222324252627282930313233343536373839404142434445#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX(x,y) (x)>(y)?(x):(y)int MaxScore[2005][2005];char Kind[150],TE[2005],Kill[2005];int Score[150];int main(){ //freopen("Sample Input.txt","r",stdin); int i,N,j; int tmp; int TLen,KLen; while (scanf("%d",&N)!=EOF) { getchar(); for ( i = 0; i < N; i++) scanf("%c",&Kind[i]); getchar(); for ( i = 0; i < N; i++) { scanf("%d",&tmp); Score[Kind[i]] = tmp; } getchar(); scanf("%s%s",Kill,TE); KLen = strlen(Kill); TLen = strlen(TE); for ( i = 0; i <= KLen; i++) MaxScore[i][0] = 0; for ( j = 0; j <= TLen; j++) MaxScore[0][j] = 0; for ( i = 1; i <= KLen; i++) { for ( j = 1; j <= TLen; j++) { if ( Kill[i-1]==TE[j-1] ) MaxScore[i][j] = MaxScore[i-1][j-1] + Score[TE[j-1]]; else MaxScore[i][j] = MAX(MaxScore[i-1][j],MaxScore[i][j-1]); } } printf("%d\n",MaxScore[KLen][TLen]); } return 0;}