Submission #1357552

#TimeUsernameProblemLanguageResultExecution timeMemory
1357552toast12Mountains (IOI17_mountains)C++20
100 / 100
12 ms16196 KiB
#include "mountains.h"
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

int maximum_deevs(vector<int> y) {
	int n = y.size();
    vector<int> v(1);
    for (int i = 0; i < n; i++) v.push_back(y[i]);
    // dp[l][r] stores the maximum number of demons you can place between points l and r
    vector<vector<int>> dp(n+1, vector<int>(n+1));
    for (int r = 1; r <= n; r++) {
        dp[r][r] = dp[r-1][r] = 1;
        int last = r-1; // index of last point visible from rth point
        int sum = 0;
        for (int l = r-2; l > 0; l--) {
            if (1ll*(v[r]-v[last])*(r-l) >= 1ll*(v[r]-v[l])*(r-last)) {
                sum += dp[l+1][last-1];
                last = l;
            }
            dp[l][r] = max(dp[l][r-1], dp[l][last-1]+sum+1);
        }
    }
    return dp[1][n];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...