Submission #1177806

#TimeUsernameProblemLanguageResultExecution timeMemory
1177806PagodePaivaCatfish Farm (IOI22_fish)C++20
14 / 100
1100 ms240972 KiB
#include "fish.h"
#include<bits/stdc++.h>
#define ll long long

using namespace std;

const int N = 310;

ll dp[N][N][N];
ll mat[N][N];
ll pref[N][N];
vector <int> variacoes[N];

ll query(int a, int b, int c, int d){
    return pref[c][d] - pref[a-1][d]-pref[c][b-1]+pref[a-1][b-1];
}

ll calc(int i, int y1, int y2, int y3){
    if(y2+1 > max(y1, y3)) return 0;
    ll sum = query(i, y2+1, i, max(y1, y3));
    return sum;
}

ll solve(int i, int y2, int y3){
    if(i == 0){
        if(y2 == 0) return dp[i][y2][y3] = 0;
        return dp[i][y2][y3] = -1e18;
    }
    if(dp[i][y2][y3] != -1) return dp[i][y2][y3];
    dp[i][y2][y3] = -1e18;
    for(auto y1 : variacoes[i-1]){
        dp[i][y2][y3] = max(dp[i][y2][y3], solve(i-1, y1, y2) +calc(i, y1, y2, y3));
    }
    return dp[i][y2][y3];
}

long long max_weights(int n, int m, std::vector<int> X, std::vector<int> Y,
                      std::vector<int> W) {
    memset(dp, -1, sizeof dp);
    for(int i = 0;i < m;i++){
        mat[X[i]+1][Y[i]+1] = W[i];
        variacoes[X[i]+1].push_back(Y[i]+1);
        variacoes[X[i]+2].push_back(Y[i]+1);
        variacoes[X[i]].push_back(Y[i]+1);
    }
    for(int i = 1;i < N;i++){
        for(int j = 1;j < N;j++){
            pref[i][j] = pref[i][j-1]+pref[i-1][j]-pref[i-1][j-1]+mat[i][j];
        }
    }
    variacoes[0].clear();
    for(int i = 0;i < N;i++){
        variacoes[i].push_back(0);
    }
    ll ans = 0;
    for(int y2 = 0;y2 < N;y2++){
        ans = max(ans, solve(n, y2, 0));
    }
    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...
#Verdict Execution timeMemoryGrader output
Fetching results...