题解

1 条题解

  • 0
    @ 2022-07-24 23:10:03
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    
    using namespace std;
    
    char s1[2005],s2[2005];
    int l1,l2,j,d[2005][2005],f;
    
    int mac(int i)
    {
        int x=i,y=l2;
        while (x && y)
        {
            if (!y) break;
            if (s1[x-1]==s2[y-1])
            {
                x--;
                y--;
            }
            else x--;
        }
        if (!y)
        {
            j=x;
            return 1;
        }
        else
        {
            j=0;
            return 0;
        }
    }
    
    int main()
    {
        scanf("%s",s1);
        scanf("%s",s2);
        l1=strlen(s1);
        l2=strlen(s2);
        for (int i=1; i<=l1; i++)
        {
            f=mac(i);
            for (int k=0; k<=i; k++)
            {
                d[i][k]=max(d[i-1][k],d[i-1][k-1]);
                if (f && j>=k-i+j+l2 && k-i+j+l2>=0) d[i][k]=max(d[i][k],d[j][k-(i-j-l2)]+1);
            }
        }
        for (int i=0; i<=l1; i++)
            printf("%d ",d[l1][i]);
        return 0;
    }
    
  • 1

信息

ID
1350
难度
7
分类
(无)
标签
递交数
9
已通过
3
通过率
33%
上传者