题解 [ABC236D] Dance
cjh20090318 · · 题解
简单搜索题。
题意
将
分析
观察数据范围
又因为
第
然后做上面这个剪枝就行了。
代码
//the code is from chenjh
#include<cstdio>
#include<algorithm>
using namespace std;
int n;
int a[20][20];
bool vis[20];//标记是否已经配对。
int ans=0;
void dfs(const int pos,const int w){
if(pos>n){ans=max(ans,w);return;}//更新答案。
if(vis[pos]){dfs(pos+1,w);return;}//当前如果已经配对,枚举下一个。
vis[pos]=1;
for(int i=pos+1;i<=n;i++)if(!vis[i]) vis[i]=1,dfs(pos+1,w^a[pos][i]),vis[i]=0;//寻找配对的伙伴。
vis[pos]=0;//注意标记清零。
}
int main(){
scanf("%d",&n),n<<=1;
for(int i=1;i<n;i++)for(int j=i+1;j<=n;j++) scanf("%d",&a[i][j]);
dfs(1,0),printf("%d\n",ans);
return 0;
}