Maximum XOR subset |
Maximum subset XOR
Given a set of positive integers. The task is to complete the function maxSubarrayXOR which returns an integer denoting the maximum XOR subset value in the given set.
Input:
3
3
2 4 5
3
33 73 64
9
5 633 64 43 131 51 87 999 23
Output:
7
104
1023
using namespace std;
//maximum value of n is 30 and maximum value of array element is 1000
int dp[30][1000];
int findSx(int a[],int i,int x)
{
//if i is less then 0 then return x bcoz x is xor sum value
if(i<0)
return x;
//if dp[i][x] is not zero then return value else calculate this value
// that mean if dp[i][x] is already calculated then there is no need to calculate again
if(dp[i][x])
return dp[i][x];
return dp[i][x]=max(findSx(a,i-1,x^a[i]),findSx(a,i-1,x));
//return maximum value by taking or ignore a[i]
}
int main() {
//code
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;++i)
{
cin>>a[i];
}
// initialize the dp with 0
memset(dp,0,sizeof(dp));
//find the xor subset from array
cout<<findSx(a,n-1,0)<<endl;
}
return 0;
}