Submission #1201564

#TimeUsernameProblemLanguageResultExecution timeMemory
1201564TimoshCatfish Farm (IOI22_fish)C++20
9 / 100
55 ms16708 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)
{
  long long cur;
  bool ok = 1;
  for (auto &i : X)
    ok &= (i % 2 == 0);
  if (ok)
    return accumulate(W.begin(), W.end(), 0ll);
  if (*max_element(X.begin(), X.end()) <= 1)
  {
    vector<long long> A(N), B(N);
    for (int i = 0; i < M; i++)
    {
      if (X[i])
        B[Y[i]] = W[i];
      else
        A[Y[i]] = W[i];
    }
    if (N == 2)
    {
      return max(A[0] + A[1], B[0] + B[1]);
    }
    long long mx, s;
    s = mx = 0;
    for (int i = 0; i < N; i++)
    {
      s += A[i] - B[i];
      mx = max(mx, s);
    }
    return mx + accumulate(B.begin(), B.end(), 0ll);
  }
  N += 5;
  int K = *max_element(Y.begin(), Y.end()) + 1;
  vector<vector<long long>> dp(N, vector<long long>(K + 1)), A(N + 1, vector<long long>(K)), pref(N + 1, vector<long long>(K + 1));
  for (int i = 0; i < M; i++)
    A[X[i] + 5][Y[i]] = W[i];
  for (int i = 5; i < N; i++)
    for (int j = 0; j < K; j++)
      pref[i][j + 1] = pref[i][j] + A[i][j];
  for (int i = 3; i < N; i++)
  {
    for (int a = 0; a <= K; a++)
    {
      for (int b = 0; b <= K; b++)
      {
        for (int c = 0; c <= K; c++)
        {
          for (int d = 0; d <= K; d++)
          {
            cur = dp[i - 3][a] - pref[i - 1][a];
            cur += pref[i - 2][max(a, c)] - pref[i - 2][min(b, max(a, c))];
            cur += pref[i - 1][max(b, d)] - pref[i - 1][min(c, max(b, d))];
            cur += pref[i][c] - pref[i][min(d, c)];
            cur += pref[i + 1][d];
            dp[i][d] = max(dp[i][d], cur);
          }
        }
      }
    }
  }
  long long mx = 0;
  for (auto &i : dp)
    mx = max(mx, *max_element(i.begin(), i.end()));
  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...