#include "fish.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void chmax(ll& x, ll y) {
x = max(x, y);
}
long long max_weights(int N, int M, std::vector<int> X, std::vector<int> Y,
std::vector<int> W) {
vector<vector<ll>> a(N + 3, vector<ll>(N + 3));
for (int i = 0; i < M; ++i) {
a[X[i] + 1][Y[i] + 1] += W[i];
}
vector<vector<vector<ll>>> dp(N + 2, vector<vector<ll>>(N + 2, vector<ll>(2)));
// 1 - for hi < h(i - 1)
// 0 - for hi >= h(i - 1)
for (int i = 2; i <= N; ++i) {
ll res = 0;
for (int j = N; j >= 0; --j) {
res = max(res, max(dp[i - 1][j][0], dp[i - 1][j][1]));
dp[i][j][1] = max(dp[i][j][1], res);
res += a[i][j];
}
res = 0;
for (int j = 0; j <= N; ++j) {
res = max(res, dp[i - 1][j][1]);
dp[i][j][0] = max(res, dp[i][j][0]);
}
res = 0;
for (int j = 0; j <= N; ++j) {
res = max(res + a[i - 1][j], dp[i][j][0]);
dp[i][j][0] = max(dp[i][j][0], res);
}
}
// for (int i = 1; i <= N; ++i) {
// for (int j = 0; j <= N; ++j) {
// for (int k = 0; k < 2; ++k) {
// cerr << dp[i][j][k] << " ";
// }
// cerr << "\n";
// }
// cerr << "\n";
// }
// cerr << "\n";
ll res = 0;
for (int i = 0; i <= N; ++i) {
for (int k = 0; k < 2; ++k) {
res = max(res, dp[N][i][k]);
}
}
return res;
}
# | 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... |