#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ll m;
ll L;
cin >> m >> L;
vector<ll> a(2 * m + 2);
for (int i = -m; i <= m; ++i) {
cin >> a[i + m];
}
vector<ll> ps(2 * m + 2), sum(2 * m + 2);
vector<ll> b(2 * m + 2);
for (int i = m; i <= 2 * m; ++i) {
b[i] = min(a[i], m);
a[i] -= b[i];
}
for (int i = m; i <= 2 * m; ++i) {
ps[i] += a[i] * (i - m);
sum[i] += a[i];
ps[i + 1] += ps[i];
sum[i + 1] += sum[i];
}
vector<ll> dp(m * m * m + 1, LLONG_MIN);
dp[0] = 0;
for (int i = m; i <= 2 * m; ++i) {
for (int _ = 0; _ < b[i]; ++_) {
int v = i - m;
for (int k = m * m * m; k >= v; --k) {
dp[k] = max(dp[k], dp[k - v] + 1);
}
}
}
ll res = LLONG_MIN;
for (int i = m; i <= 2 * m; ++i) {
ll need = L - ps[i];
// cout << need << " ";
if (need < 0 || need > m * m * m) continue;
if (dp[need] == LLONG_MIN) continue;
res = max(res, dp[need] + sum[i]);
}
if (res == LLONG_MIN) {
cout << "impossible\n";
} else {
cout << res << endl;
}
}
# | 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... |