Submission #317848

#TimeUsernameProblemLanguageResultExecution timeMemory
317848ali_tavakoliBali Sculptures (APIO15_sculpture)C++17
71 / 100
113 ms512 KiB
//In the name of Allah #include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl '\n' #define F first #define S second #define pb push_back #define al(x) x.begin(), x.end() const ll N = 105, M = 40, inf = 1e18 + 5; ll n, a, b, y[2005]; void s5() { ll N2 = 2005; ll dp[N2]; ll ans = (1LL << M) - 1; for(ll i = M - 1; i >= 0; i--) { for(ll j = 0; j < N2; j++) dp[j] = inf; dp[0] = 0; for(ll j = 0; j <= n; j++) { ll sum = 0; for(ll pos = j + 1; pos <= n; pos++) { sum += y[pos - 1]; if((sum | ans) > ans|| (1LL << i) & sum) continue; dp[pos] = min(dp[pos], dp[j] + 1); } } if(dp[n] <= b) ans -= (1LL << i); } cout << ans << endl; } int main() { cin >> n >> a >> b; for(ll i = 0; i < n; i++) cin >> y[i]; if(a == 1) { s5(); return 0; } bool dp[N][N]; ll ans = (1LL << M) - 1; for(ll i = M - 1; i >= 0; i--) { for(ll j = 0; j < N; j++) for(ll k = 0; k < N; k++) dp[j][k] = 0; dp[0][0] = 1; for(ll j = 0; j <= n; j++) for(ll k = 0; k < N; k++) { ll sum = 0; for(ll pos = j + 1; pos <= n; pos++) { sum += y[pos - 1]; if((sum | ans) > ans|| (1LL << i) & sum) continue; dp[pos][k + 1] |= dp[j][k]; } } for(ll k = a; k <= b; k++) if(dp[n][k]) { ans -= (1LL << i); break; } } cout << ans << endl; }
#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...