最长公共子串,裸的复杂度N^2

#include<bits/stdc++.h>
using namespace std;
int dp[1005][1005];
int main()
{
    char a[1005];
    char b[1005];
    scanf("%s%s",a,b);

    memset(dp,0,sizeof(dp));
    int lena=strlen(a);
    int lenb=strlen(b);
    dp[0][0]=0;
    for(int i=1;i<=lena;i++)
    {
        for(int j=1;j<=lenb;j++)
        {

            if(a[i-1]==b[j-1])
            {
                dp[i][j]=max(dp[i-1][j-1],dp[i][j])+1;
            }
            else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
        }
    }
    int ans=0;
    for(int i=0;i<=lena;i++)
        for(int j=0;j<=lenb;j++)
            ans=max(ans,dp[i][j]);
    cout<<ans<<endl;
    return 0;
}