제출 #1332535

#제출 시각아이디문제언어결과실행 시간메모리
1332535opeleklanos메기 농장 (IOI22_fish)C++20
0 / 100
1097 ms20556 KiB
// #include <algorithm>
#include <vector>
#include <iostream>
// #include <queue>
using namespace std;


#define ll long long 

vector<vector<ll>> dp;
vector<vector<ll>> g;
ll n;

ll calcDp(ll ind, ll p){
    ll mx = 0;
    dp[ind][p] = 0;

    if(ind >= 3){
        for(ll i = 0; i<9; i++){
            dp[ind][p] = max(calcDp(ind-3, i), dp[ind][p]);
        }
        for(ll i = 0; i<p; i++) dp[ind][p] += g[ind-1][i] + ((ind<n-1)?g[ind+1][i]:0);
    }

    if(ind >= 2){
        ll sum = 0;
        for(ll i = 0; i<p; i++) sum += g[ind-1][i] + ((ind<n-1)?g[ind+1][i]:0);
        for(ll i = 0; i<9; i++){
            if(i<=p && i>0) sum -= g[ind-1][i-1];
            mx = max(mx, sum + dp[ind-2][i]);
        }
        dp[ind][p] = max(dp[ind][p], mx);

        sum = 0;

        for(ll i = 0; i<p; i++) sum += ((ind<n-1)?g[ind+1][i]:0);

        for(ll i = 0; i<9; i++){
            if(i<=p && i>0) sum -= g[ind][i-1];
            dp[ind][p] = max(dp[ind][p], sum + dp[ind-1][i]);
        }

    }

    if(ind <= 1){
        for(ll i = 0; i<p; i++){
            dp[ind][p] += (i<n-1?g[ind+1][i]:0) + (0<ind?g[ind-1][i]:0);
        }
    }

    return dp[ind][p];
}

ll max_weights(int n1, int m, vector<int> x, vector<int> y, vector<int> w){
    n = n1;
    dp.assign(n, vector<ll>(9, -1));
    g.assign(n, vector<ll>(9, 0));
    for(ll i = 0; i<m; i++){
        g[x[i]][y[i]] = w[i];
    }
    ll mx = 0;
    for(ll i = 0; i<n; i++){
        for(ll j = 0; j<9; j++){
            if(dp[i][j] == -1) calcDp(i, j);
            mx = max(mx, dp[i][j]);
        }
    }
    return mx;
}
#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...