제출 #1361663

#제출 시각아이디문제언어결과실행 시간메모리
1361663kasamchiCatfish Farm (IOI22_fish)C++20
0 / 100
872 ms2162688 KiB
#include "fish.h"
#include <bits/stdc++.h>
using namespace std;

long long max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W) {
    int K = *max_element(Y.begin(), Y.end()) + 1;
    vector<vector<int>> A(K, vector(N, 0));
    for (int i = 0; i < M; i++) {
        A[Y[i]][X[i]] = W[i];
    }

    vector<vector<int>> P(K + 1, vector(N, 0));
    for (int j = 0; j < N; j++) {
        for (int i = K - 1; i >= 0; i--) {
            P[i][j] = P[i + 1][j] + A[i][j];
        }
    }

    vector<vector<vector<long long>>> dp(N, vector(K + 1, vector(K + 1, 0LL)));
    for (int a = 0; a <= K; a++) {
        for (int b = 0; b <= K; b++) {
            if (a < b) {
                dp[0][a][b] = P[a][0] - P[b][0];
            }
        }
    }

    for (int i = 0; i + 1 < N; i++) {
        for (int a = 0; a <= K; a++) {
            for (int b = 0; b <= K; b++) {
                for (int c = 0; c <= K; c++) {
                    if (max(a, c) > b) {
                        dp[i + 1][b][c] = max(dp[i + 1][b][c], dp[i][a][b] + P[b][i + 1] - P[max(a, c)][i + 1]);
                    } else {
                        dp[i + 1][b][c] = max(dp[i + 1][b][c], dp[i][a][b]);
                    }
                }
            }
        }
    }

    long long ret = 0;
    for (int a = 0; a <= K; a++) {
        for (int b = 0; b <= K; b++) {
            if (a > b) {
                dp[N - 1][a][b] = dp[N - 2][a][b] + P[N - 1][b] - P[N - 1][a];
            } else {
                dp[N - 1][a][b] = dp[N - 2][a][b];
            }
            ret = max(ret, dp[N - 1][a][b]);
        }
    }
    return ret;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…