Submission #604376

#TimeUsernameProblemLanguageResultExecution timeMemory
604376PlurmUplifting Excursion (BOI22_vault)C++11
0 / 100
5032 ms12152 KiB
#include <bits/stdc++.h>
using namespace std;

class negarr {
private:
  int data[505000 * 2 + 1];

public:
  negarr() { memset(data, 0, sizeof(data)); }
  void reset() { fill(data, data + 505000 * 2 + 1, -1000000000); }
  int &operator[](int i) { return data[i + 505000]; }
};
negarr a, knapsack;
int main() {
  int m;
  long long l;
  cin >> m >> l;
  if (l > 505000 || l < -505000) {
    printf("impossible\n");
    return 0;
  }
  knapsack.reset();
  knapsack[0] = 0;
  for (int i = -m; i <= m; i++) {
    cin >> a[i];
    for (int rep = 0; rep < a[i]; rep++) {
      negarr tmp;
      tmp.reset();
      for (int id = -505000; id <= 505000; id++) {
        if (-505000 <= id + i && id + i <= 505000)
          tmp[id + i] = max(tmp[id + i], knapsack[id] + 1);
      }
      for (int id = -505000; id <= 505000; id++) {
        knapsack[id] = max(knapsack[id], tmp[id]);
      }
    }
  }
  if (knapsack[l] >= 0)
    printf("%d\n", knapsack[l]);
  else
    printf("impossible\n");
  return 0;
}
#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...