Submission #1225612

#TimeUsernameProblemLanguageResultExecution timeMemory
1225612julianFinancial Report (JOI21_financial)C++20
28 / 100
4111 ms1114112 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <numeric>
#include <climits>

using namespace std;
using ll = long long;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    ll n, d;
    cin >> n >> d;

    vector<ll> a(n);
    for (ll& i : a) {
        cin >> i;
    }

    vector<vector<ll>> dp(n, vector<ll>(n + 1, LLONG_MAX));
    dp[0][0] = -1;
    dp[0][1] = a[0];

    for (ll i = 1; i < n; i++) {
        dp[i][0] = -1;
        for (ll k = max(i - d, 0ll); k < i; k++) {
            for (ll j = 1; j <= n; j++) {
                // Something, also sliding window minimum
                if (a[i] <= dp[k][j]) {
                    dp[i][j] = min(dp[i][j], max(a[i], dp[k][j]));
                }

                // Continue chain, can be optimized by comparing a[i] against sliding window minimum
                if (a[i] > dp[k][j - 1]) {
                    dp[i][j] = a[i];
                }
            }
        }
    }



    cout << (find(dp[n - 1].begin(), dp[n - 1].end(), LLONG_MAX) - dp[n - 1].begin()) - 1 << endl;

    

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...