很水的状压,但是我错了(
查看原帖
很水的状压,但是我错了(
117658
Space_Gold_Trash楼主2020/6/11 11:49

未知错误

#include<bits/stdc++.h>
#define MOD 100000000
#define N 13
#define M 13
using namespace std;
int n,m;
bool a[N][M];
int f[N][5000];
int ok[5000],p;
inline void pre( ){
	cin>>n>>m;
	int i,j;
	for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
	cin>>a[i][j];
}
inline void get_ok( ){
	int i,j;
	bool flag;
	for(i=0;i<1<<m;i++){
		flag=0;
		for(j=1;j<m;j++)
		if(i>>j&1&&i>>j-1&1){
			flag=1;
			break;
		}
		if(!flag)ok[++p]=i;
	}
}
inline bool right(int aa,int b,int k){
	int i;
	for(i=0;i<m;i++)
	if((aa>>i&1&&b>>i&1)||(!a[k][i+1]&&b>>i&1)||(aa>>i&1&&!a[k-1][i+1]))return 0;
	return 1;
}
inline void dp( ){
	int i,j,k;
	for(j=1;j<=p;j++)
	if(0,ok[i],1)
	f[1][j]=1;
	for(i=2;i<=n;i++)
	for(j=1;j<=p;j++)
	for(k=1;k<=p;k++)
	if(right(ok[j],ok[k],i))f[i][k]=f[i][k]+f[i-1][j]%MOD;
}
inline void final( ){
	int ans=0,i;
	for(i=1;i<=p;i++)
	ans=ans+f[n][i]%MOD;
	cout<<ans<<endl;
}
int main( ){
	std::ios::sync_with_stdio(0);
	pre( );
	get_ok( );
	dp( );
	final( );
}
2020/6/11 11:49
加载中...