제출 #1216142

#제출 시각아이디문제언어결과실행 시간메모리
1216142Mousa_Aboubaker메기 농장 (IOI22_fish)C++20
0 / 100
17 ms7756 KiB
#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 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...