Submission #1262685

#TimeUsernameProblemLanguageResultExecution timeMemory
1262685tormentBali Sculptures (APIO15_sculpture)C++20
71 / 100
59 ms632 KiB
#include<bits/stdc++.h> using namespace std; // https://codeforces.com/blog/entry/17717?#comment-227370 const int N = 2005; const int LOG = 38; const int inf = 1e9; int a[N]; bool dp[N][N]; int dp2[N]; bool check2(long long S, int n, int B){ for(int i = 0;i <= n + 1;++i){ dp2[i] = inf; } dp2[n + 1] = 0; for(int i = n;i >= 1;--i){ long long sum = 0; for(int j = i;j <= n;++j){ sum += a[j]; if((sum & S) == sum){ dp2[i] = min(dp2[i], dp2[j + 1] + 1); } } } return dp2[1] <= B; } bool check(long long S, int n, int A, int B){ if(A == 1)return check2(S, n, B); for(int i = 1;i <= n + 1;++i){ for(int j = 0;j <= n;++j){ dp[i][j] = false; } } for(int i = A;i <= B;++i){ dp[n + 1][i] = true; } for(int i = n;i >= 1;--i){ for(int j = 0;j <= n;++j){ long long sum = 0; for(int ii = i;ii <= n;++ii){ sum += a[ii]; if((sum & S) == sum){ dp[i][j] = (dp[i][j] | dp[ii + 1][j + 1]); } } } } return dp[1][0]; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n, A, B; cin >> n >> A >> B; for(int i = 1;i <= n;++i){ cin >> a[i]; } long long ans = (1ll << LOG) - 1; for(int i = LOG - 1;i >= 0;--i){ if(check(ans - (1ll << i), n, A, B)){ ans -= (1ll << i); } } 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...