1 条题解

  • 0
    @ 2025-9-10 9:12:35

    C++ :

    #include<iostream>
    #include<cstring>
    #include<climits>
    #include<algorithm>
    using namespace std;
    int a[5004];
    int dp_len[5004];
    int dp_cnt[5004];
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int n;
        while(cin>>n)
        {
            for(int i = 1; i <= n; i++)cin>>a[i];
            a[0] = INT_MAX;
            memset(dp_len, 0, sizeof dp_len);
            memset(dp_cnt, 0, sizeof dp_cnt);
            int ans_len = -1, ans_cnt = 0;
            for(int i = 1; i <= n; i++)
            {
                for(int j = 0; j < i; j++)
                {
                    if(a[i] < a[j])
                    {
                        dp_len[i] = max(dp_len[j] + 1, dp_len[i]);
                    }
                }
                if(ans_len < dp_len[i]){
                    ans_len = dp_len[i];
                }
            }
            dp_cnt[0] = 1;
            for(int i = 1; i <= n; i++)
            {
                for(int j = i - 1; j >= 0; j--)
                {
                    if(dp_len[i] == dp_len[j] && a[i] == a[j]){
                        break;
                    }
                    if(dp_len[i] == dp_len[j] + 1 && a[i] < a[j])
                    {
                        dp_cnt[i] += dp_cnt[j];
                    }
                }
                if(dp_len[i] == ans_len) ans_cnt += dp_cnt[i];
            }
            cout<<ans_len<<" "<<ans_cnt<<endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    3957
    时间
    1000ms
    内存
    30MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者