#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)
{
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;
vector<vector<long long>> dp(N, vector<long long>(N + 1)), A(N + 1, vector<long long>(N)), pref(N + 1, vector<long long>(N + 1));
int K = *max_element(Y.begin(), Y.end()) + 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 < N; 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++)
{
long long cur = dp[i - 2][a] - pref[i - 1][min(a, b)];
cur += pref[i + 1][c];
if (b > c)
cur += pref[i][b] - pref[i][c];
if (c > a)
cur += pref[i - 1][c] - pref[i - 1][a];
dp[i][c] = max(dp[i][c], cur);
}
}
}
}
long long mx = 0;
for (auto &i : dp)
mx = max(mx, *max_element(i.begin(), i.end()));
return mx;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |