#include <iostream>
#include <vector>
using namespace std;
#define ll long long
ll M, L, N, NN, MM, NP;
vector<ll> A;
vector<ll> DP;
int main() {
cin >> M >> L;
MM = 2 * M + 1;
A.resize(MM);
N = 0;
NP = 0;
for (ll i = 0; i < MM; i++) {
cin >> A[i];
if (i > M) {
NP += abs(i - M) * A[i];
} else {
N += abs(i - M) * A[i];
}
}
NN = N + NP + 1;
DP.resize(NN);
for (ll i = 0; i < NN; i++) {
DP[i] = -1000000000000000;
}
DP[N] = 0;
for (ll i = 0; i < MM; i++) {
ll x = i - M;
for (ll _ = 0; _ < A[i]; _++) {
if (x >= 0) {
for (ll j = NN - 1; j >= x; j--) {
DP[j] = max(DP[j], DP[j - x] + 1);
}
} else {
for (ll j = 0; j < NN + x; j++) {
DP[j] = max(DP[j], DP[j - x] + 1);
}
}
}
}
if ((L < N) || (L >= NN)) {
cout << "impossible\n";
} else if (DP[L + N] < 0) {
cout << "impossible\n";
} else {
cout << DP[L + N] << endl;
}
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... |