제출 #1192268

#제출 시각아이디문제언어결과실행 시간메모리
1192268ChuanChenBali Sculptures (APIO15_sculpture)C++20
50 / 100
64 ms328 KiB
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int inf = 2e9;
int n, A, B;
ll sv[2005];
int dp[2005];
//dp[i] := usando [1; i], qtd minimo de grupos para o resultado seja um submask do prefixo que temos  
//dp[i] = inf <=> não consigo
ll ans;

bool isSubmask(int b, ll val){
	return (ans>>b)==((ans>>b)|(val>>b));
}

bool solve(int b){

	for(int i = 1; i <= n; i++) dp[i] = inf;
	for(int i = 1; i <= n; i++){
		for(int j = 0; j < i; j++){
			//[1; i] = [1; j] U [j+1; i]; 
			if(isSubmask(b, sv[i]-sv[j])) dp[i] = min(dp[i], dp[j]+1);
		}
	}
	if(dp[n] <= B) return true;
	return false;
}

int main(){
    cin.tie(0)->sync_with_stdio(0);
	cin >> n >> A >> B;
	for(int i = 1; i <= n; i++){
		int a; cin >> a;
		sv[i] = sv[i-1]+a;
	}

	for(int b = 40; b >= 0; b--){
		if(!solve(b)){
			ans+=(1ll<<b);
		}
	}

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