Submission #551081

#TimeUsernameProblemLanguageResultExecution timeMemory
551081ala2Bali Sculptures (APIO15_sculpture)C++14
21 / 100
241 ms262144 KiB
    #include <bits/stdc++.h>
        #define int long long
        #define pb push_back
        #define F first
        #define S second
        #define B begin()
        #define E end()
        using namespace std;
        int n,l,r;
        int a[100100];
        int p[100010];
        int suf[100000];
        int dp[104][104][2004];
        int sum(int i,int j)
        {
            return p[j]-p[i]+a[i];
        }
        int f(int i,int k,int x)
        {
            if(i==n&&k>=l&&k<=r)
                return x;
            else if(i==n)return 1e18;
            if(k==r)
            {
                return (x|suf[i]);
            }
            if(dp[i][k][x]!=-1)
                return dp[i][k][x];
            int mn=1e18;
            if(k>=l)
                mn=min(mn,(suf[i]|x));
            for(int j=i;j<n;j++)
            {
                mn=min(mn,f(j+1,k+1,(x|sum(i,j))));
            }
            return dp[i][k][x]=mn;
     
        }
        signed main()
        {
             memset(dp,-1,sizeof dp);
            cin>>n>>l>>r;
            
            l--;
            r--;
            for(int i=0;i<n;i++)
                cin>>a[i];
            a[n]=0;
            n++;
            p[0]=a[0];
            for(int i=1;i<n;i++)
                p[i]=p[i-1]+a[i];
            suf[n-1]=a[n-1];
            for(int i=n-2;i>=0;i--)
            {
                suf[i]=suf[i+1]+a[i];
            }
     
            int mn=1e18;
            mn=min(mn,f(0,0,0));
     
            cout<<mn<<endl;
        }
#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...