WA10求助
查看原帖
WA10求助
1040109
_Deer_Peach_楼主2024/2/25 18:24
#include<bits/stdc++.h>
using namespace std;
const int N=10007;
char a[230][230],b[230][230];
int c[1600],n,m=15,ans,x[230],y[230],dp[230][1600];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)scanf("%c",a[i]+1);
	if(n<m){
		swap(n,m);
		memcpy(b,a,sizeof(b));
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				a[i][j]=b[m-j+1][i];
			}
		}	
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]=='1')x[i]+=1<<(m-j);
			if(a[i][j]=='0')y[i]+=1<<(m-j);
		}
	}
	for(int i=0;i<(1<<m);i++){
		if(((i>>1)&i)==0){
			c[++c[0]]=i;	
		}
	}
	dp[0][1]=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=c[0];j++){
			if((x[i]&c[j])!=x[i])continue;
			if((y[i]&(~c[j]))!=y[i])continue;
			for(int k=1;k<=c[0];k++){
				if((c[j]&c[k])==0){
					dp[i][j]=(dp[i][j]+dp[i-1][k])%N;
				}
			}
		}
	}
	for(int i=1;i<=c[0];i++){
		ans=(ans+dp[n][i])%N;
	}
	cout<<ans;
	return 0;
}
2024/2/25 18:24
加载中...