Submission #972726

#TimeUsernameProblemLanguageResultExecution timeMemory
972726Halym2007Bali Sculptures (APIO15_sculpture)C++17
100 / 100
69 ms604 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int N = 2e3 + 5; ll n, A, B, dp[N], a[N], dp1[105][105]; bool check (ll x) { for (int i = 1; i <= n; ++i) { dp[i] = 1e9; } for (int i = 1; i <= n; ++i) { ll sum = 0; for (int j = i; j > 0; j--) { sum += a[j]; if ((sum & x) == sum) { dp[i] = min (dp[i], dp[j - 1] + 1); } } } return dp[n] <= B; } bool check1 (ll x) { for (int i = 0; i <= n; ++i) { for (int j = 0; j <= n; ++j) { dp1[i][j] = 0; } } dp1[0][0] = 1; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= i; ++j) { ll sum = 0; for (int k = i; k > 0; k--) { sum += a[k]; if ((sum & x) == sum) { dp1[i][j] |= dp1[k - 1][j - 1]; } } } } for (int i = A; i <= B; ++i) { if (dp1[n][i]) return 1; } return 0; } int main () { // freopen ("input.txt", "r", stdin); cin >> n >> A >> B; for (int i = 1; i <= n; ++i) { cin >> a[i]; } ll x = (1LL << 42) - 1; for (int i = 41; i >= 0; i--) { x ^= (1LL << i); if (A == 1 and !check(x)) { x ^= (1LL << i); } else if (A > 1 and !check1(x)) { x ^= (1LL << i); } } cout << x << "\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...