[C++]求助,全WA
查看原帖
[C++]求助,全WA
567610
RDFZchenyy楼主2022/3/4 15:15
#include<bits/stdc++.h>
using namespace std;

int n,k;
long long ans;

#define MAXK 2005 
#define MAXN 15
#define MAXST 2005

bool unconflict(int i,int j){
	return (!(j&i)&&(!j&(i<<1)&&(!j&(i>>1))));
}

int getint1(int st){
	int tmp=0;
	for(int i=1;i<=(1<<10);i<<=1){
		if(i&st){
			tmp++;
		}
	}
	return tmp;
}

bool legal[MAXST];
long long dper[MAXN][MAXST][MAXK];
int cntk[MAXST],now;

int main(){
	scanf("%d %d",&n,&k);
	const int maxk=(1<<n);
	int i2;
	memset(cntk,0,sizeof(cntk));
	for(int i=0;i<maxk;i++){
		i2=i;
		legal[i]=unconflict(i,i);
		now=0;
		cntk[i]=getint1(i);
		if(legal[i]&&cntk[i]<=k){
			dper[1][i][cntk[i]]=1;	
			printf("flag cntk[i]=%d i=%d\n",cntk[i],i);		
		}
	}
	for(int i=2;i<=n;i++){
		for(int sti=0;sti<maxk;sti++){
			if(!legal[sti]){
				continue;
			}
			for(int stj=0;stj<maxk;stj++){
				if(unconflict(sti,stj)){
					int ki=cntk[sti];
					for(int kj=cntk[stj];kj+ki<=k;kj++){
						dper[i][sti][ki+kj]+=dper[i-1][stj][kj];
					}
				}				
			}
		}
	}
	for(int i=0;i<maxk;i++){
		ans+=dper[n][i][k];
	}
	for(int i=1;i<=n;i++){
		for(int j=0;j<=maxk;j++){
			for(int l=1;l<=100;l++){
				printf("%d ",dper[i][j][l]);
			}
			printf("\n");
		}
		printf("\n");
	}
	printf("%lld\n",ans);
	
	return 0;
}
2022/3/4 15:15
加载中...