任意个数异或最大值(DFS)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SYaoJun/article/details/87613348

问题: 在N<=10个数里面选任意个数,使得他们的xor值最大
思路1:最简单的办法是O( 2 n 2^n )去暴力枚举
思路2:DFS
对于这个问题,其实可以看成N个阶段,每个阶段我对于每个数都有选与不选两种选择,那么我们dfs不妨就写成dfs(int step, int value)表示我们现在正在考虑的第step个数,前面选的数xor起来等于value

#include<cstdio>
#include<iostream>
using namespace std;
int arr[7]={3,4,5,7,9,1,3};
int N =7,ans = 0;
void dfs(int step, int value){
	if(step == N+1){
		ans = max(ans, value);
		return;
	}
	dfs(step+1, value);
	dfs(step+1, value ^ arr[step]);
}
int main(){
	dfs(0,0);
	cout<<ans<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/SYaoJun/article/details/87613348