Submission #376007

#TimeUsernameProblemLanguageResultExecution timeMemory
376007Alex_tz307Bali Sculptures (APIO15_sculpture)C++17
100 / 100
182 ms620 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int NMAX = 2048; const int INF = 1e6; int N, A, B, a[NMAX], dp35[NMAX], ans = (1LL << 61) - 1; bool dp124[NMAX][NMAX]; void min_self(int &a, int b) { a = min(a, b); } bool check35() { for(int i = 0; i <= N; ++i) dp35[i] = INF; dp35[0] = 0; for(int i = 0; i < N; ++i) { int sum = 0; for(int j = i; j <= N; ++j) { sum += a[j]; if((sum | ans) == ans) min_self(dp35[j + 1], dp35[i] + 1); } } return dp35[N] <= B; } bool check124() { for(int i = 0; i <= N; ++i) for(int k = 0; k <= B; ++k) dp124[i][k] = false; dp124[0][0] = true; for(int i = 0; i < N; ++i) for(int k = 0; k < B; ++k) { int sum = 0; for(int j = i; j < N; ++j) { sum += a[j]; if((sum | ans) == ans) dp124[j + 1][k + 1] |= dp124[i][k]; } } for(int k = A; k <= B; ++k) if(dp124[N][k]) return true; return false; } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> N >> A >> B; for(int i = 0; i < N; ++i) cin >> a[i]; for(int bit = 60; bit >= 0; --bit) { ans ^= (1LL << bit); if(A == 1) { if(!check35()) ans |= (1LL << bit); } else if(!check124()) ans |= (1LL << bit); } 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...