Submission #1320354

#TimeUsernameProblemLanguageResultExecution timeMemory
1320354vaishakhvUplifting Excursion (BOI22_vault)C++20
5 / 100
1097 ms318468 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define eb emplace_back

#define m1(x) template<class T, class... U> void x(T&& a, U&&... b)
#define m2(x) (ll[]){(x forward<U>(b),0)...}

m1(pr){cout << forward<T>(a);  m2(cout << " " <<); cout << "\n";}
m1(re){cin >> forward<T>(a); m2(cin >>);}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    ll m, l; re(m, l);

    vector<ll> a(2*m+1);
    for (ll i{}; i < 2*m+1; i++){
        re(a[i]);
    }
    if (abs(l) > 1e5) {
        pr("impossible");
        return 0;
    }

    ll ofs = 1e5;
    ll rg = 2e5 + 1;
    
    vector<vector<ll>> dp(2*m+2, vector<ll>(rg, -1));
    dp[0][ofs] = 0; 
    
    for (ll i{}; i < 2*m+1; i++) {
        ll uplift = i - m;
        
        for (ll sum = 0; sum < rg; sum++) {
            if (dp[i][sum] == -1) continue;
            
            dp[i+1][sum] = max(dp[i+1][sum], dp[i][sum]);
            
            for (ll cnt = 1; cnt <= a[i]; cnt++) {
                ll new_sum = sum + cnt * uplift;
                if (new_sum >= 0 && new_sum < rg) {
                    dp[i+1][new_sum] = max(dp[i+1][new_sum], dp[i][sum] + cnt);
                }
            }
        }
    }
    
    ll tgt = l + ofs;
    if (tgt >= 0 && tgt < rg && dp[2*m+1][tgt] != -1) {
        pr(dp[2*m+1][tgt]);
    } else {
        pr("impossible");
    }
}
#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...