#include <bits/stdc++.h>
using namespace std;
int main() {
int M, L;
cin >> M >> L;
int zindex = 500000;
vector<long long> maxcount(1000001, -1);
vector<long long> pieces(2 * M + 1);
if(L + zindex < 0 || L + zindex >= 1000001) {
cout << "impossible\n";
return 0;
}
maxcount[zindex] = 0;
for(int i = 0; i < 2 * M + 1; i++) {
cin >> pieces[i];
}
for(int i = -M, ix = 0; i <= M; i++, ix++) {
vector<long long> newmaxcount = maxcount;
for(int j = 0; j < maxcount.size(); j++) {
if(maxcount[j] == -1)
continue;
for(int k = 1; k <= pieces[ix]; k++) {
newmaxcount[j + k * i] = max(newmaxcount[j + k * i], maxcount[j] + k);
}
}
maxcount = newmaxcount;
}
if(maxcount[L + zindex] == -1)
cout << "impossible\n";
else
cout << maxcount[L + zindex] << "\n";
return 0;
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |