bzoj 3033 太鼓达人
思路:首先一定是2^m次方的总数。用二进制从 000 一直到 111总过m个数,然后暴搜。
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<queue> 5 #include<stack> 6 #include<bits/stdc++.h> 7 using namespace std; 8 #define LL long long 9 #define clc(a,b) memset(a,b,sizeof(a)) 10 const int maxn = 2000 + 10; 11 int n,t; 12 bool used[2010]; 13 int a[2010]; 14 bool dfs(int x,int k){ 15 if(used[x]) return 0; 16 if(k==t) return 1; 17 a[k]=x&1; 18 used[x]=1; 19 if(dfs((x<<1)&(t-1),k+1)) return 1; 20 if(dfs((x<<1|1)&(t-1),k+1)) return 1; 21 used[x]=0; 22 return 0; 23 } 24 int main(){ 25 while(~scanf("%d",&n)){ 26 clc(a,0); 27 clc(used,0); 28 t=pow(2,n); 29 printf("%d ",t); 30 dfs(0,1); 31 for(int i=1;i<n;i++) 32 printf("0"); 33 for(int j=1;j<=t-n+1;j++){ 34 printf("%d",a[j]); 35 } 36 printf("\n"); 37 } 38 return 0; 39 }