void solve() {
    int n;
    cin >> n;
    vector<int> a(n + 1);
    for (int i = 1; i <= n; i++) cin >> a[i];
    reverse(a.begin() + 1, a.end());

    const int inf = 1e9;
    vector<ll> dp(n + 1, -inf), f(n + 1);
    f[0] = 1, dp[0] = 0;

    ll res = 0;
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < i; j++) {
            if (a[j] < a[i]) {
                dp[i] = max(dp[i], dp[j] + 1);
            }
        }
        for (int j = i - 1; j >= 0; j--) {
            if (a[j] == a[i]) break;
            if (a[j] < a[i] && dp[j] == dp[i] - 1) {
                f[i] += f[j];
            }
        }
        res = max(res, dp[i]);
    }

    cout << res << ' ';
    ll sum = 0;
    for (int i = 1; i <= n; i++) if (dp[i] == res) sum += f[i];
    cout << sum << '\n';
}

0 条评论

目前还没有评论...

信息

ID
448
时间
ms
内存
MiB
难度
7
标签
递交数
23
已通过
8
上传者