제출 #1321189

#제출 시각아이디문제언어결과실행 시간메모리
1321189AMel0nBali Sculptures (APIO15_sculpture)C++20
0 / 100
0 ms332 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF = 1e18;

ll N, A, B;
vector<ll> V;
vector<vector<ll>> dp; // dp[i][OR-sum]
vector<ll> PS;
ll sum(ll a, ll b) {
    return PS[b+1] - PS[a];
}

signed main() {
    cin.tie(0); ios::sync_with_stdio(false);
    cin >> N >> A >> B;
    V.resize(N), PS.resize(N+1);
    ll MX = 0;
    for(ll i = 0; i < N; i++) {
        cin >> V[i];
        PS[i+1] = PS[i] + V[i];
        MX = max(MX, V[i]);
    }
    ll MXX = ((1ll << (__lg(MX) + 2ll)) - 1ll);
    dp.resize(N+1, vector<ll>(MXX + 1, INF));
    dp[0][0] = 0;
    for(ll i = 0; i <= N; i++) {
        for(ll k = MXX; k >= 0; k--) {
            for(ll j = 0; j < i; j++) {
                dp[i][sum(j, i-1) | k] = min(dp[i][sum(j, i-1) | k], 1 + dp[j][k]);
                // cout << i << ' ' << j << ' ' << k << ' ' << (sum(j, i-1) | k) << ' ' << dp[j][k] << ' ' << dp[i][sum(j, i-1) | k] << endl;
            }
        }
    }
    for(ll k = 0; k <= MXX; k++) {
        if (dp[N][k] <= B) {
            cout << k << endl;
            break;
        }
    }
}
#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...