제출 #604379

#제출 시각아이디문제언어결과실행 시간메모리
604379PlurmUplifting Excursion (BOI22_vault)C++11
0 / 100
1739 ms24428 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]; negarr tmp; tmp.reset(); if (i >= 0) { for (int id = 505000 - i; id >= -505000; id--) { for (int j = 1; j <= a[i]; j++) tmp[id + j * i] = max(tmp[id + j * i], knapsack[id] + j); } } else if (i < 0) { for (int id = -505000 - i; id <= 505000; id++) { for (int j = 1; j <= a[i]; j++) tmp[id + j * i] = max(tmp[id + j * i], knapsack[id] + j); } } 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...