제출 #741967

#제출 시각아이디문제언어결과실행 시간메모리
741967siewjhBali Sculptures (APIO15_sculpture)C++17
100 / 100
213 ms360 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int nums, a, b; cin >> nums >> a >> b; vector<ll> pref(nums + 1); for (int i = 1; i <= nums; i++){ ll x; cin >> x; pref[i] = pref[i - 1] + x; } if (a == 1){ ll ans = (1ll << 60) - 1; for (int bit = 59; bit >= 0; bit--){ ll targ = ans - (1ll << bit); int dp[2005]; for (int i = 0; i <= nums; i++) dp[i] = 2005; dp[0] = 0; for (int i = 1; i <= nums; i++) for (int k = 0; k < i; k++){ ll sum = pref[i] - pref[k]; if ((sum & targ) == sum) dp[i] = min(dp[i], dp[k] + 1); } if (dp[nums] <= b) ans = targ; } cout << ans; } else{ ll ans = (1ll << 60) - 1; for (int bit = 59; bit >= 0; bit--){ ll targ = ans - (1ll << bit); bool dp[105][105]; memset(dp, 0, sizeof(dp)); dp[0][0] = 1; for (int i = 1; i <= nums; i++) for (int j = 1; j <= i; j++) for (int k = 0; k < i; k++){ ll sum = pref[i] - pref[k]; if ((sum & targ) == sum) dp[i][j] |= dp[k][j - 1]; } bool ok = 0; for (int j = a; j <= b; j++) if (dp[nums][j]) ok = 1; if (ok) ans = targ; } cout << ans; } return 0; }
#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...