社区讨论

警示后人

P1879[USACO06NOV] Corn Fields G参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mju1kupm
此快照首次捕获于
2025/12/31 21:18
2 个月前
此快照最后确认于
2026/01/03 10:30
2 个月前
查看原帖
这道题的条件判断一定不能写反
见代码
CPP
#include <bits/stdc++.h>
using namespace std;

int m, n;

int a[13];
int dp[13][1 << 12];

signed main() {
	cin >> m >> n;
	for (int i = 1; i <= m; i++) {
		int x;
		for (int j = 1; j <= n; j++) {
			cin >> x;
			a[i] = (a[i] << 1) + x;
		}
	}
	for (int i = 0; i < (1 << n); i++) {
		if (((i | a[1]) == a[1]) && !(i & (i << 1))) {//  here
			dp[1][i] = 1;
		}
	}
	for (int i = 2; i <= m; i++) {
		for (int j = 0; j < (1 << n); j++) {
			if (((j | a[i]) == a[i]) && !(j & (j << 1))) {//  here
				for (int k = 0; k < (1 << n); k++) {
					if (((k | a[i - 1]) == a[i - 1]) && !(j & k) && !(k & (k << 1))) {//  here
						dp[i][j] += dp[i - 1][k];
						dp[i][j] %= 100000000;
					}
				}
			}
		}
	}
	int ans = 0;
	for (int i = 0; i < (1 << n); i++) {
		ans += dp[m][i];
		ans %= 100000000;//  不要忘记取模!!!
	}
	cout << ans;
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...