版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SYaoJun/article/details/87613348
问题: 在N<=10个数里面选任意个数,使得他们的xor值最大
思路1:最简单的办法是O(
)去暴力枚举
思路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;
}