[USACO06NOV]玉米田Corn Fields

【代码】

#include<bits/stdc++.h>

using namespace std;

const int N = 15, M = 15, p = 100000000;

int n, m, f[N][1 << M], F[N], a[N][M], MAX, ans = 0;
bool pd[1 << M];

int main() {
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; ++i)
		for(int j = 1; j <= m; ++j)
			scanf("%d", &a[i][j]);
	MAX = 1 << m;
	for(int i = 1; i <= n; ++i)
		for(int j = 1; j <= m; ++j)
			F[i] = (F[i] << 1) + a[i][j];
	memset(f,0, sizeof f);
	for(int i = 0; i < MAX; ++i)
		pd[i] = (i & i >> 1) == 0;
	f[0][0] = 1;
	for(int i = 1; i <= n; ++i) {
		for(int j = 0; j < MAX; ++j)
			if((j & F[i]) == j && pd[j])
				for(int k = 0; k < MAX; ++k)
					if((j & k) == 0) {
						f[i][j] += f[i - 1][k];
						f[i][j] %= p;
					}
	}
	for(int i = 0; i < MAX; ++i) {
		ans += f[n][i];
		ans %= p;
	}
	printf("%d\n", ans);
	return 0;
}
posted @ 2018-03-25 20:12  绍兴土匪  阅读(113)  评论(0编辑  收藏  举报