Submission #1129079

#TimeUsernameProblemLanguageResultExecution timeMemory
1129079vladiliusCatfish Farm (IOI22_fish)C++20
35 / 100
1171 ms1883540 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define pb push_back
#define ff first
#define ss second

ll max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W){
    int n = N, m = M;
    for (int i = 0; i < m; i++){
        X[i]++; Y[i]++;
    }
    vector<int> d[n + 1];
    for (int i = 0; i < m; i++){
        d[X[i]].pb(i);
    }
    
    vector<vector<ll>> F(n + 1, vector<ll>(n + 1));
    for (int i = 1; i <= n; i++){
        for (int j: d[i]){
            F[i][Y[j]] = W[j];
        }
        for (int j = 1; j <= n; j++){
            F[i][j] += F[i][j - 1];
        }
    }
    
    auto f = [&](int i, int l, int r){
        return F[i][r] - F[i][l - 1];
    };
    
    vector<vector<vector<ll>>> dp(n + 1, vector<vector<ll>>(n + 1, vector<ll>(2)));
    for (int i = 2; i <= n; i++){
        for (int j = 0; j <= n; j++){
            // dp[i][j][0]
            for (int k = 0; k <= j; k++){
                dp[i][j][0] = max(dp[i][j][0], dp[i - 1][k][0] + f(i - 1, k + 1, j));
            }
            if (i > 2){
                for (int t = 0; t <= j; t++){
                    dp[i][j][0] = max(dp[i][j][0], max(dp[i - 2][t][0], dp[i - 2][t][1]) + f(i - 1, 1, j));
                }
                for (int t = j + 1; t <= n; t++){
                    dp[i][j][0] = max(dp[i][j][0], max(dp[i - 2][t][0], dp[i - 2][t][1]) + f(i - 1, 1, t));
                }
            }
            
            // dp[i][j][1]
            for (int k = j + 1; k <= n; k++){
                dp[i][j][1] = max(dp[i][j][1], max(dp[i - 1][k][0], dp[i - 1][k][1]) + f(i, j + 1, k));
            }
        }
    }
    ll out = 0;
    for (int i = 1; i <= n; i++){
        for (int j = 0; j <= n; j++){
            out = max({out, dp[i][j][0], dp[i][j][1]});
        }
    }
    return out;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...