#include "fish.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
long long max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W)
{
auto n = N, m = M;
auto x = X, y = Y, w = W;
if(n == 1)
return 0;
vector<int> ord(m);
iota(ord.begin(), ord.end(), 0);
sort(ord.begin(), ord.end(), [&](int l, int r)
{
return x[l] < x[r];
});
vector dp(m + 1, vector<ll>(2, 0));
// dp[i][j] = the max score I can get if I built a pier in i, or if I didn't
for(int i = 0; i < m; i++)
{
if(i == 0 and x[ord[0]] == 0)
continue;
dp[i + 1][0] = max(dp[i][0], dp[i][1] + w[ord[i]]);
dp[i + 1][1] = max(dp[i][1], dp[i][0]);
if(i)
dp[i + 1][1] = max(dp[i + 1][1], max(dp[i - 1][0], dp[i - 1][1]) + w[ord[i - 1]]);
}
ll res = max(dp.back()[0], dp.back()[1]);
if(x[ord[m - 1]] != n - 1)
{
res = max(res, max(dp.end()[-2][0], dp.end()[-2][1]) + w[ord[m - 1]]);
}
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... |