1 solutions

  • 0
    @ 2024-6-14 11:00:02
    // 暴力解法
    #include <iostream>
    using namespace std;
    
    const int N = 3100;
    int a[N], b[N];
    int n;
    int f[N][N];
    
    int main () {
    
        cin >> n;
        for (int i = 1; i <= n; i ++) cin >> a[i];
        for (int i = 1; i <= n; i ++) cin >> b[i];
        
    
        int ans = 0;
        for (int i = 1; i <= n; i ++) { // a
            for (int j = 1; j <= n; j ++) { // b
                f[i][j] = f[i - 1][j];
                int tmp = 0;
                if (a[i] == b[j]) {
                    tmp = 1;
                    for (int k = 1; k < i; k ++) {
                        for (int z = 1; z < j; z ++) {
                            if(a[k] == b[z] && b[j] > b[z]) {
                                tmp = max(tmp, f[k][z] + 1);
                            }
                        }
                    }   
                }
                f[i][j] = max(f[i][j], tmp);
                ans = max(ans, f[i][j]);
            }
        }
        cout << ans << endl;
    
        return 0;
    }
    
    // 等价变换,最值维护优化
    #include <iostream>
    using namespace std;
    
    const int N = 3100;
    int a[N], b[N];
    int n;
    int f[N][N];
    
    int main () {
    
        cin >> n;
        for (int i = 1; i <= n; i ++) cin >> a[i];
        for (int i = 1; i <= n; i ++) cin >> b[i];
        
        // f[i][j] 表示 a(1~i) ,  b(1~j),必然以 a[i] 为结尾的最长上升公共子序列
        int ans = 0;
        for (int i = 1; i <= n; i ++) { // a
            int tmp = 0;
            for (int j = 1; j <= n; j ++) { // b
                // 答案在前一行,维护前一行的最值
                if (a[i] > b[j]) tmp = max(tmp, f[i - 1][j] + 1);
                int ret = 0;
                if (a[i] == b[j]) {
                    ret = max(1, tmp);  // 若此处相等,则说明可从前一行的最大上升子序列处进行转移。
                }
                f[i][j] = max(f[i - 1][j], ret); // 与上一位置取最值
                ans = max(ans, f[i][j]);
            }
        }
        cout << ans << endl;
    
        return 0;
    }
    
    • 1

    Information

    ID
    2
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    10
    Tags
    (None)
    # Submissions
    22
    Accepted
    1
    Uploaded By