dp
#include <bits/stdc++.h>
using namespace std;
int main() {
// your code goes here
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
int M=1<<20;
int dp[M];
char res[M];
for(int i=1;i<M;i++)
dp[i]=int_max;
for(int i=0;i<n;i++)
{
if(a[i]==0)
continue;
for(int j=0;j<M;j++)
res[j]=0;
for(int k=0;k<M;k++)
{
if(res[k]==1)
continue;
if(dp[k]>dp[k^a[i]])
dp[k]=dp[k^a[i]]+1;
else if(dp[k^a[i]]>dp[k])
dp[k^a[i]]=dp[k]+1;
res[k^a[i]]=1;
}
}
int j=M-1,k=n>>1;
while(dp[j]>k)
j--;
cout<<j;
return 0;
}
Parsed in 0.004 seconds