1 solutions

  • 0
    @ 2025-11-5 18:40:32

    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

    Information

    ID
    18979
    Time
    1000ms
    Memory
    30MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By