Submission #652618

#TimeUsernameProblemLanguageResultExecution timeMemory
652618BlagojCatfish Farm (IOI22_fish)C++17
18 / 100
107 ms13744 KiB
#include "fish.h"
#include <bits/stdc++.h>
 
using namespace std;
 
long long max_weights(int N, int M, std::vector<int> X, std::vector<int> Y, std::vector<int> W) {
  
  bool Even = true, Less = true;
  for (auto x : X)
  {
    if (x % 2 != 0)
    {
      Even = false;
    }
    if (x > 1)
    {
      Less = false;
    }
  } 
  if (Even)
  {
    long long sum = 0;
    for (auto x : W)
    {
      sum += x;
    }
    return sum;
  }
  if (Less)
  {
    long long m[N + 3][3];
    memset(m, 0, sizeof(m));
    for (int i = 0; i < M; i++)
    {
      m[Y[i]][X[i]] = W[i];
    }
    for (int i = 1; i < N; i++)
    {
      m[i][0] += m[i - 1][0];
      m[i][1] += m[i - 1][1];
    }
    long long ans = max(m[N - 1][0], m[N - 1][1]);
    if (N == 2)
    {
      return ans;
    }
    for (int i = 0; i < N; i++)
    {
      ans = max(ans, m[i][0] + m[N - 1][1] - m[i][1]);
    }
    return ans;
  }
  long long dp[N + 3][3], p[N + 3];
  memset(dp, 0, sizeof(dp));
  memset(p, 0, sizeof(p));
  for (int i = 0; i < M; i++)
  {
    p[X[i]] = W[i];
  }
  dp[0][0] = dp[0][1] = 0;
  dp[1][0] = p[1];
  dp[1][1] = p[0];
  for (int i = 2; i < N; i++)
  {
    dp[i][1] = max({dp[i - 1][0], dp[i - 2][0] + p[i - 1], dp[i - 1][1]});
    dp[i][0] = max({dp[i - 1][1] + p[i], dp[i - 1][0]});
  }
  return max(dp[N - 1][0], dp[N - 1][1]);
}
#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...