Submission #1367244

#TimeUsernameProblemLanguageResultExecution timeMemory
1367244mannshah1211Catfish Farm (IOI22_fish)C++20
0 / 100
139 ms113912 KiB
#include "fish.h"
#include <bits/stdc++.h>
#include <vector>

using namespace std;

const long long inf = (long long) 1e18;

long long max_weights(int n, int m, vector<int> x, vector<int> y, vector<int> w) {
  vector<vector<int>> a(n + 1, vector<int>(9));
  for (int i = 0; i < m; i++) {
    a[x[i] + 1][y[i]] = w[i];
  }
  vector<vector<long long>> pref(n + 1, vector<long long>(10));
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j < 10; j++) {
      pref[i][j] = pref[i][j - 1] + a[i][j - 1];
    }
  }
  auto sum = [&](int i, int j, int k) {
    if (j > k) {
      return 0ll;
    }
    return pref[i][k + 1] - pref[i][j];
  };
  vector<vector<vector<long long>>> dp(n + 2, vector<vector<long long>>(9, vector<long long>(9, -inf))); // represents the state of the LAST TWO columns
  for (int j = 0; j < 9; j++) {
    dp[1][j][0] = 0;
  }
  for (int i = 2; i <= n + 1; i++) {
    for (int j = 0; j < 9; j++) {
      for (int k = 0; k < 9; k++) {
        for (int l = 0; l < 9; l++) {
          dp[i][j][k] = max(dp[i][j][k], dp[i - 1][k][l] + sum(i - 1, k + 1, max(j, l)));
        }
      }
    }
  }
  return *max_element(dp[n + 1][0].begin(), dp[n + 1][0].end());
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...