#2,8,9,10TLE,#7MLE

P1439 【模板】最长公共子序列

大海中的孤帆 @ 2023-08-03 09:25:55

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n;
int f[10050][10050];
int x[100010],y[100010];
int q(int a,int b)
{
    if(a>b)
        return a;
    return b;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;++i)
        cin>>x[i];
    for(int i=1;i<=n;++i)
        cin>>y[i];
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=n;++j)
        {
            f[i][j]=q(f[i-1][j],f[i][j-1]);
            if(x[i]==y[j])
                f[i][j]=q(f[i][j],f[i-1][j-1]+1);
        }
    }
    cout<<f[n][n];
    return 0;
}

by _Haoomff_ @ 2023-08-03 09:27:13

@大海中的孤帆 这题要用二分优化


by 大海中的孤帆 @ 2023-08-03 09:30:34

@Haoomff

知道,但不会,求教


by Pink_Cut_Tree @ 2023-08-03 14:51:21

@大海中的孤帆 请您估计一下时空范围:

  1. 您的代码是 O(n^2) 的,不炸才怪

  2. 您开了一个 10050\times 10050 的数组,不炸才怪

鉴定为:

建议优化,比如二维压一维+二分

(虽然我也不知道怎么优化)


by Pink_Cut_Tree @ 2023-08-03 14:51:29

@大海中的孤帆


by 大海中的孤帆 @ 2023-08-03 16:29:25

@Present_Coming_Time

我知道这个,但是不开这么大该RE了


|