Submission #1137036

#TimeUsernameProblemLanguageResultExecution timeMemory
1137036sohamsen15Bali Sculptures (APIO15_sculpture)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int INF = 2e9;
const ll INFL = 2e18;

ll n; vector<ll> a, p;
map<pll, ll> memo;

ll solve(ll idx, ll left) {
    if (memo.count({idx, left})) return memo[{idx, left}];
    if (left == 0) return p[idx];
    ll best = INFL;
    for (ll i = 1; i < idx; i++) {
        // Place partition between i and i + 1 
        ll prev = solve(i, left - 1);
        ll sum = p[idx] - p[i];
        best = min(best, prev | sum);
    }
    memo[{idx, left}] = best;
    return best;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    ll l, r; cin >> n >> l >> r; a.resize(n + 1); p.resize(n + 1);
    for (ll i = 1; i <= n; i++) cin >> a[i]; p[0] = 0;
    for (ll i = 1; i <= n; i++) p[i] = a[i] + p[i - 1];
    ll ans = INFL; for (ll i = l; i <= r; i++) ans = min(ans, solve(n, i));
    cout << ans;
}
#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...