#include <bits/stdc++.h>
using namespace std;
using un = long long;
using vuc = vector<un>;
using vol = vector<bool>;
using puc = pair<un, un>;
#define REP(i, a, b) for (un i = (un)a; i < (un)b; i++)
#define FEAC(i, a) for (auto&& i : a)
#define vec vector
#define ALL(x) (x).begin(), (x).end()
constexpr un mINF = INT64_MIN;
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
un M, L; cin >> M >> L;
vuc A(2*M+1); FEAC(a, A) cin >> a;
un MAX = 600000;
// un MAX = 10;
if ((L > MAX) or (L < -MAX)) return 0;
vuc DP(2*MAX+1, mINF);
DP[MAX+0] = 0;
vuc newDP;
REP(v, -M, M+1){
if (A[M+v] == 0) continue;
newDP = DP;
REP(i, 0, DP.size()){
REP(x, 1, A[M+v]+1){
if ((i + x*v) >= DP.size()) break;
if ((i + x*v) < 0) break;
newDP[i + x*v] = max(newDP[i + x*v], DP[i]+x);
}
}
DP = move(newDP);
}
if (DP[MAX+L] < 0) cout << "impossible\n";
else cout << DP[MAX+L] << "\n";
}
# | 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... |