Submission #1175934

#TimeUsernameProblemLanguageResultExecution timeMemory
1175934DanielPr8Uplifting Excursion (BOI22_vault)C++20
0 / 100
1 ms392 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = __int128_t;
using pp = long long;
using vll = vector<ll>;
using vvl = vector<vll>;
using vb = vector<bool>;
using pll = pair<ll,ll>;
using vpl = vector<pll>;
using vvp = vector<vpl>;
using vi = vector<int>;
#define f first
#define s second
#define all(v) v.begin(),v.end()
#define pb push_back


int main(){
    ios_base::sync_with_stdio(0);cin.tie(NULL);
    pp n, l, z, q;
    ll s1 = 0, s2=0, a1=0, a2 = 0;
    cin >> n >> l;
    vll ng(n),ps(n);
    for(ll i = n; i > 0; --i){cin >> q;ng[i-1]=q;a2+=ng[i-1];s2+=ng[i-1]*i;}
    cin >> z;
    for(ll i = 1; i <= n; ++i){cin >> q;ps[i-1]=q;a1+=ps[i-1];s1+=ps[i-1]*i;}
    if(s1-s2<l){
        swap(s1, s2);
        swap(a1, a2);
        l=-l;
        swap(ng, ps);
    }
    if(l>s1 || s2>l)cout << "impossible";
    l = s1-s2-l;
    vvl kn(n+1, vll(s1+s2+1, 1e18));
    kn[0][s2]=0;
    for(ll i = 0; i < n; ++i){
        for(ll j = 0; j <= s1+s2; ++j){
            kn[i+1][j]=1e18;
            for(ll h = 0; h <= ps[i] && j>=h*(i+1); ++h){
                kn[i+1][j] = min(kn[i+1][j], kn[i][j-(i+1)*h]+h);
            }
        }
    }
    reverse(all(kn));
    for(ll i = 0; i < n; ++i){
        for(ll j = 0; j <= s1+s2; ++j){
            kn[i+1][j]=1e18;
            for(ll h = 0; h <= ng[i] && j+h*(i+1)<=s1+s2; ++h){
                kn[i+1][j] = min(kn[i+1][j], kn[i][j+(i+1)*h]+h);
            }
        }
    }
    if(kn[n][l+s2]==1e18)cout << "impossible";
    else cout << pp(a1+a2-kn[n][l+s2]+z);
}
#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...