Submission #551389

#TimeUsernameProblemLanguageResultExecution timeMemory
551389ala2Bali Sculptures (APIO15_sculpture)C++14
46 / 100
75 ms16076 KiB
    #include <bits/stdc++.h>
    #define owo(i,a, b) for(int i=(a); i<(b); ++i)
    #define uwu(i,a, b) for(int i=(a)-1; i>=(b); --i)
    #define senpai push_back
    #define ttgl pair<int, int> 
    #define ayaya cout<<"debug"<<endl
     
    using namespace std;
    using ll = long long;
    using ld = long double;
    const ll MOD = 1e9+7;
    const int INF = 0x3f3f3f3f;
    const ll INFLL = 0x3f3f3f3f3f3f3f3f;
    vector<ll> arr;
    vector<ll> psum;
    int dp[2002][2002];
    int n, a, b;
    ll currbest = 0;
    bool solve(ll bit) {
        ll mx = currbest+(1LL<<bit);
        if(a==1) {
            owo(i, 0, n+1) {
                dp[0][i] = INF;
            }
            dp[0][0] = 0;
            owo(i, 0, n) {
                owo(j, 0, i+1) {
                    //cout<<currbest<<" "<<(psum[i+1]-psum[j])<<" "<<(currbest|(psum[i+1]-psum[j]))<<" "<<mx<<"\n";
                    if((currbest|(psum[i+1]-psum[j]))<mx) {
                        dp[0][i+1] = min(dp[0][i+1] , dp[0][j] + 1);
                    }
                }
            }
            return dp[0][n]>b;
            
        }else {
            owo(i, 0, 2002) {
                owo(j, 0, 2002) {
                    dp[i][j] = 0;
                }
            }
            dp[0][0] = 1;
            owo(i, 0, n) {
                owo(j, 0, i+1) {
                    if((currbest|(psum[i+1]-psum[j]))<mx) {
                        owo(k, 0, b) {
                            if(dp[j][k]) {
                                dp[i+1][k+1] = 1;
                            }
                        }
                    }
                }
            }
            for(int i=a; i<=b; ++i) {
                if(dp[n][i]) {
                    return false;
                }
            }
            return true;
        }
    }
    int main()
    {
        //freopen("filename.in", "r", stdin);
        //freopen("filename.out", "w", stdout);
        cin.tie(0)->sync_with_stdio(0);
        cin>>n>>a>>b;
        arr.resize(n);
        psum.resize(n+1);
        psum[0] = 0;
        owo(i, 0, n) {
            cin>>arr[i];
            psum[i+1] = psum[i] + arr[i];
        }
        for(ll i = 35; i>=0; --i) {
            if(solve(i)) {
                currbest+=(1LL<<i);
            }
        }
        cout<<currbest<<"\n";
        return 0;
    }
#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...