问题: 在N<=10个数里面选任意个数,使得他们的xor值最大
思路1:最简单的办法是O( <math> <semantics> <mrow> <msup> <mn> 2 </mn> <mi> n </mi> </msup> </mrow> <annotation encoding="application&#47;x&#45;tex"> 2^n </annotation> </semantics> </math>2n)去暴力枚举
思路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;
}