제출 #1245490

#제출 시각아이디문제언어결과실행 시간메모리
1245490DeathIsAwe송신탑 (IOI22_towers)C++20
11 / 100
12 ms4860 KiB
#include "towers.h"
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
using namespace std;
vector<int> h;
int n, dp[2000];
bool connected[2000][2000];

void init(int N, vector<int> H) {
    h = H; n = N;
}

int max_towers(int l, int r, int d) {
    for (int i=l;i<r+1;i++) {
        for (int j=l;j<r+1;j++) {
            connected[i][j] = false;
        }
    }
    for (int i=l;i<r;i++) {
        int maxval = h[i + 1];
        for (int j=i+2;j<r+1;j++) {
            if (h[j] <= maxval - d && h[i] <= maxval - d) {connected[i][j] = true; connected[j][i] = true;}
            maxval = max(maxval, h[j]);
        }
    }
    //for (int i=l;i<r+1;i++) {
    //    for (int j=l;j<r+1;j++) {
    //        cout << connected[i][j] << ' ';
    //    }
    //    cout << '\n';
    //} cout << endl;


    dp[l] = 1;
    for (int i=l+1;i<r+1;i++) {
        dp[i] = 1;
        for (int j=i-2;j>l-1;j--) {
            if (connected[i][j]) dp[i] = max(dp[i], dp[j] + 1);
        }
    }
    int ans = 0;
    for (int i=l;i<r+1;i++) {
        ans = max(ans, dp[i]);
    }
    //for (int i=l;i<r+1;i++) {
    //    cout << dp[i] << ' ';
    //} cout << endl;
    return ans;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...