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

问题: 在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;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务