제출 #585379

#제출 시각아이디문제언어결과실행 시간메모리
585379GusterGoose27Bali Sculptures (APIO15_sculpture)C++11
21 / 100
14 ms340 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int MAXN1 = 100;
bool dp[MAXN1+1][MAXN1+1];
int n, a, b;
int vals[MAXN1];
ll cur = 0;
int bit;

bool works(ll sum) {
	ll sumshift = (sum >> bit);
	ll curshift = (cur >> bit);
	return ((curshift&sumshift) == sumshift);
}

bool possible() {
	for (int i = n; i >= 0; i--) {
		for (int j = 0; j <= n; j++) {
			dp[i][j] = 0;
			if (i == n) {
				dp[i][j] = 1;
				continue;
			}
			if (j > n-i) {
				dp[i][j] = dp[i][n-i];
				continue;
			}
			if (j == 0) {
				continue;
			}
			ll s = 0;
			for (int next = i+1; next <= n; next++) {
				s += vals[next-1];
				if (dp[next][j-1] && works(s)) {
					dp[i][j] = 1;
					break;
				}
			}
		}
	}
	for (int i = a; i <= b; i++)
		if (dp[0][i]) return 1;
	return 0;
}

int main() {
	cin >> n >> a >> b;
	for (int i = 0; i < n; i++) {
		cin >> vals[i];
		cur += vals[i];
	}
	bit = floor(log2(cur));
	cur = 0;
	while (bit >= 0) {
		if (!possible()) { // possible to avoid
			cur += (1ULL << bit);
		}
		bit--;
	}
	cout << cur << "\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...