rt 求改

#include<bits/stdc++.h>
#define sc scanf
#define qq for
#define p printf
#define wh while
using namespace std;
long long n, m;
long long sit[10000];
long long cnt;
long long f[200][20000];
long long pp[100000];
void wrl ( long long op, long long e )
{
	if ( e > m )
	{
		sit[++cnt] = op;
		return;
	}
	wrl ( op, e + 1 );
	wrl ( op + ( 1 << ( e - 1 ) ), e + 2 );
}
int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	sc ( "%lld%lld", &n, &m );
	int a;
	for ( long long  i = 1; i <= n; i++ )
		for ( long long j = 1; j <= m; j++ )
		{
			sc ( "%d", &a );
			pp[i] += ( a << ( j - 1 ) );
		}
	wrl ( 0, 1 );
	for ( long long i = 1; i <= cnt; i++ ) if ( ( sit[i] | pp[1] ) == pp[1] ) f[1][i] = 1;
	for ( long long i = 2; i <= n; i++ )
		for ( long long j = 1; j <= cnt; j++ )
		{
			if ( ( sit[i] | pp[i] ) > pp[i] ) continue;
			for ( long long x = 1; x <= cnt; x++ )
			{
				if ( ( sit[j] & sit[x] ) == 0 )
					f[i][j] = ( f[i][j] + f[i - 1][x]) % 100000000;
			}
		}
	long long ans = 0;
	for ( long long i = 1; i <= cnt; i++ ) ans += f[n][i] % 100000000, ans %= 100000000;
	p ( "%lld", ans % 100000000 );
	return 0;
}

0 条评论

目前还没有评论...