Submission #1056444

#TimeUsernameProblemLanguageResultExecution timeMemory
1056444aykhnCatfish Farm (IOI22_fish)C++17
0 / 100
105 ms19788 KiB
#include "fish.h"
#include <bits/stdc++.h>

using namespace std;

const int MXN = 3e2 + 5;

long long dp[2][MXN][MXN], val[MXN][MXN];
long long lft[MXN][MXN], rig[MXN][MXN], in[MXN][MXN];

/*
0 = len[i] < len[i + 1];
1 = len[i] > len[i + 1];
*/
long long max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W) 
{
    for (int i = 0; i < M; i++) val[X[i] + 1][Y[i] + 1] += 1LL * W[i];
    for (int i = 1; i <= N; i++) 
    {
        for (int j = 1; j <= N; j++)
        {
            lft[i][j] = lft[i][j - 1] + val[i - 1][j];
            rig[i][j] = rig[i][j - 1] + val[i + 1][j];
            in[i][j] = in[i][j - 1] + val[i][j];
        }
    }
    for (int i = 1; i <= N; i++)
    {
        for (int j = 1; j <= N; j++)
        {
            dp[0][i][j] = dp[1][i][j] = lft[i][j] + rig[i][j];
            if (i == 1) continue;
            for (int k = 1; k <= N; k++)
            {
                if (k <= j)
                {
                    long long res = (dp[0][i - 1][k] - rig[i - 1][k]) + ((lft[i][j] - in[i - 1][k]) + rig[i][j]);
                    dp[0][i][j] = max(dp[0][i][j], res);
                }
                if (k >= j)
                {
                    long long res = dp[1][i - 1][k] - in[i][j] + rig[i][j];
                    dp[1][i][j] = max(dp[1][i][j], res);
                }
            }
            if (i == 2) continue;
            for (int k = 1; k <= N; k++)
            {
                long long res = max(dp[0][i - 2][k], dp[1][i - 2][k]) + lft[i][j] + rig[i][j];
                if (k <= j) res -= rig[i - 2][k];
                else res -= lft[i][j];
                dp[0][i][j] = max(dp[0][i][j], res);
                dp[1][i][j] = max(dp[1][i][j], res);
            }
        }
    }
    long long ans = 0;
    for (int i = 1; i <= N; i++) 
    {
        for (int j = 1; j <= N; j++) 
        {
            ans = max({ans, dp[0][i][j], dp[1][i][j]});
        }
    }
    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...