思路和1080一样
题目有几个坑:
范围要开到2010,题目没有给
子弹数量和恐怖分子出现的字符串长度不一定相等
用memset会超时
#include "stdio.h" #include "string.h" int dp[2010][2010],a[2010]; int Max(int a,int b,int c) { int x; x=a; if (b>x) x=b; if (c>x) x=c; return x; } int main() { int n,i,j,x,y,z,len_a,len_b; char key[2010],str_a[2010],str_b[2010]; while (scanf("%d",&n)!=EOF) { scanf("%s",key); for (i=0;i<n;i++) scanf("%d",&a[key[i]]); scanf("%s %s",str_a,str_b); len_a=strlen(str_a); len_b=strlen(str_b); for (i=1;i<=n;i++) dp[0][i]=dp[i][0]=0; dp[0][0]=0; for (i=1;i<=len_a;i++) for (j=1;j<=len_b;j++) { x=dp[i-1][j]; y=dp[i][j-1]; z=dp[i-1][j-1]; if (str_a[i-1]==str_b[j-1]) z+=a[str_a[i-1]]; dp[i][j]=Max(x,y,z); } printf("%d\n",dp[len_a][len_b]); } return 0; }
时间: 2024-11-08 21:36:11