HDU 1243 DP

来源:互联网 发布:数据仓库软件 编辑:程序博客网 时间:2024/05/20 06:55

思路和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;}



0 0
原创粉丝点击