社区讨论
警示后人
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 条回复,欢迎继续交流。
正在加载回复...