比赛 |
二进制状态表示之搜索中的应用 |
评测结果 |
AAAAAAAAAA |
题目名称 |
跳棋的挑战 |
最终得分 |
100 |
用户昵称 |
宇战 |
运行时间 |
1.169 s |
代码语言 |
C++ |
内存使用 |
2.31 MiB |
提交时间 |
2023-07-27 08:36:11 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,s,o,a[10000],b[1000];
void dfs(int now,int RL,int LR,int st){
if(st>n){
s++;
if(o<3){
for(int i=1;i<st;i++){
cout<<b[i]<<' ';
}
cout<<endl;
o++;
}
return;
}
int lim=(now|RL|LR)^((1<<n)-1);
lim=lim&((1<<n)-1);
for(int i=lim;i;i&=(i-1)){
int t=i&(-i);
b[st]=a[t];
dfs(now|t,(RL|t)<<1,(LR|t)>>1,st+1);
}
}
int main(){
freopen("checker.in","r",stdin);
freopen("checker.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
int x=pow(2,i-1);
a[x]=i;
}
dfs(0,0,0,1);
cout<<s;
return 0;
}