Submission #566547

#TimeUsernameProblemLanguageResultExecution timeMemory
566547ac2huBali Sculptures (APIO15_sculpture)C++14
46 / 100
1078 ms6956 KiB
#include <bits/stdc++.h>
#ifdef DEBUG
#include "../templates/debug.h"
#else 
#define deb(x...)
#endif
using namespace std;
#define int long long 
struct bag : set<int>{
    void add(int n){
        vector<int> tt;
        for(auto it = begin();it != end();++it){
            int e = *it;
            if((e&n) == e)return;
            if((e&n) == n)tt.push_back(e);
        }
        for(auto e : tt)erase(find(e));
        insert(n);
    }
};
signed main() {
    iostream::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);
    int n, a, b;cin >> n >> a >> b;
    vector<int> Y(n);
    for(auto &e : Y)cin >> e;
    bag dp[n + 1][n + 1];
    dp[0][0].add(0);
    for(int i = 1;i<=n;i++){
        for(int gsize = 1;gsize<=n;gsize++){
            int tsum = 0;
            for(int j = i;j>=1;j--){
                tsum += Y[j - 1];
                if(dp[j - 1][gsize - 1].size() != 0){
                    for(auto e : dp[j - 1][gsize - 1])
                        dp[i][gsize].add(e|tsum);
                }
            }
        }
    }
    int ans = 1e18;
    for(int i = a;i<=b;i++){
        // deb(i, dp[n][i]);
        if(dp[n][i].size() != 0)
            ans = min(ans, *dp[n][i].begin());
    }
    cout << ans << "\n";
}
#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...