1 条题解

  • 0
    @ 2024-8-31 23:48:18
    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int n = 0;
        int a[1001]; // 存储输入数组
        vector<int> dp; // dp[i] 存储以 a[i] 结尾的最长不上升子序列的长度
        vector<int> cc; // cc[i] 存储以 a[i] 结尾的最长上升子序列的长度
        // 使用 scanf 读取输入,并确保 n 的准确计数
        while (scanf("%d", &a[n]) != EOF) {
            n++;
        }
        if (n == 0) {
            cout << "0\n0\n"; // 如果没有输入,则输出 0
            return 0;
        }
        dp.resize(n, 1);  
        cc.resize(n, 1);
        int maxcnt = 1; // 存储最长不上升子序列的长度
    
        // 计算最长不上升子序列(LNIS)
        for (int i = 1; i < n; i++) {
            for (int j = 0; j < i; j++) {
                if (a[i] <= a[j] && dp[i] < dp[j] + 1) { // 更新条件:a[i] <= a[j]
                    dp[i] = dp[j] + 1;
                }
            }
            maxcnt = max(maxcnt, dp[i]); // 更新最大长度
        }
        cout << maxcnt << endl; // 输出最长不上升子序列的长度
    
        maxcnt = 1; // 重置 maxcnt
    
        // 计算最长上升子序列(LIS)
        for (int i = 1; i < n; i++) {
            for (int j = 0; j < i; j++) {
                if (a[i] >= a[j] && cc[i] < cc[j] + 1) { // 更新条件:a[i] >= a[j]
                    cc[i] = cc[j] + 1;
                }
            }
            maxcnt = max(maxcnt, cc[i]); // 更新最大长度
        }
        cout << maxcnt << endl; // 输出最长上升子序列的长度
    
        return 0;
    }
    
    
    • 1

    信息

    ID
    738
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    84
    已通过
    13
    上传者