Submission #361523

#TimeUsernameProblemLanguageResultExecution timeMemory
361523alireza_kavianiBali Sculptures (APIO15_sculpture)C++11
100 / 100
209 ms16512 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;

#define all(x)						(x).begin(),(x).end()
#define X							first
#define Y							second
#define sep							' '
#define endl						'\n'
#define SZ(x)						ll(x.size())

const ll MAXN = 2e3 + 10;
const ll LOG = 43;
const ll INF = 8e18;
const ll MOD = 1e9 + 7; //998244353; //1e9 + 9;

ll n , x , y , A[MAXN] , ans = (1ll << LOG) - 1;
int dp[MAXN] , dp2[MAXN][MAXN];

int check(ll cur){
	memset(dp , 0 , sizeof(dp));
	memset(dp2 , 0 , sizeof(dp2));
	dp2[0][0] = 1;
	for(int i = 1 ; i <= n ; i++){
		ll sum = 0;
		dp[i] = MOD;
		for(int j = i - 1 ; j >= 0 ; j--){
			sum += A[j + 1];
			if((sum | cur) != cur)	continue;
			if(x == 1){
				dp[i] = min(dp[i] , dp[j] + 1);
				continue;
			}
			for(int k = 1 ; k <= i ; k++){
				dp2[i][k] |= dp2[j][k - 1];
			}
		}
	}
	if(x == 1)	return (dp[n] <= y);
	for(int i = x ; i <= y ; i++){
		if(dp2[n][i])	return 1;
	}
	return 0;
}

int main() {
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

	cin >> n >> x >> y;
	for(int i = 1 ; i <= n ; i++)	cin >> A[i];
	for(int i = LOG - 1 ; i >= 0 ; i--){
		if(check(ans ^ (1ll << i))){
			ans ^= (1ll << i);
		}
	}
	cout << ans << endl;

    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...