Submission #1229426

#TimeUsernameProblemLanguageResultExecution timeMemory
1229426avighnaUplifting Excursion (BOI22_vault)C++20
0 / 100
825 ms589824 KiB
#include <bits/stdc++.h>

int main() {
  int m;
  int64_t l;
  std::cin >> m >> l;
  std::vector<int> a;
  int64_t high = 0, low = 0;
  for (int i = -m; i <= m; ++i) {
    int64_t x;
    std::cin >> x;
    for (int j = 0; j < x; ++j) {
      a.push_back(i);
      if (i > 0) { 
        high += i;
      } else {
        low += i;
      }
    }
  }
  if (l < low or l > high) {
    std::cout << "impossible\n";
    return 0;
  }
  const int inf = 1e9;
  std::vector dp(a.size() + 1, std::vector<int>(high - low + 1, -inf));
  dp[0][-low] = 0;
  for (int i = 1; i <= a.size(); ++i) {
    for (int j = low; j <= high; ++j) {
      dp[i][j - low] = dp[i - 1][j - low];
      if (low <= j - a[i - 1] and j - a[i - 1] <= high) {
        dp[i][j - low] = std::max(dp[i][j - low], dp[i - 1][j - a[i - 1] - low] + 1);
      }
    }
  }
  int ans = dp[a.size()][l - low];
  if (ans < 0) {
    std::cout << "impossible\n";
  } else {
    std::cout << ans << '\n';
  }
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...