[luoguP1879] [USACO06NOV]玉米田Corn Fields(DP)
2017-05-30 19:34
162 查看
说要统计方案,感觉就是个 Σ
而矩阵中只有 01 ,可以用二进制表示
这样,预处理出每一个每一行所有可能的状态 s
然后初始化第一行所有状态的方案数为 1
f[i][j] = Σf[i - 1][k] (k 和 j 不冲突,j 为第 i 行所有方案,k 为第 i - 1 行所有方案)
——代码
#include <cstdio> #include <iostream> #define mod 100000000 int n, m, ans; int f[13][1 << 13], pos[13][1 << 13], s[13][1 << 13]; inline int read() { int x = 0, f = 1; char ch = getchar(); for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1; for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0'; return x * f; } inline void dfs(int k, int i, int num) { if(i > pos[k][0]) { s[k][++s[k][0]] = num; return; } dfs(k, i + 1, num); if((pos[k][i] ^ (pos[k][i - 1] + 1)) || (i == 1)) dfs(k, i + 1, num + (1 << pos[k][i] - 1)); else if((i ^ 1) && (pos[k][i] == pos[k][i - 1] + 1)) if(((num >> pos[k][i - 1] - 1) & 1) ^ 1) dfs(k, i + 1, num + (1 << pos[k][i] - 1)); } int main() { int i, j, k, x; n = read(); m = read(); for(i = 1; i <= n; i++) for(j = 1; j <= m; j++) { x = read(); if(x) pos[i][++pos[i][0]] = j; } for(i = 1; i <= n; i++) dfs(i, 1, 0); for(i = 1; i <= s[1][0]; i++) f[1][i] = 1; for(i = 2; i <= n; i++) for(j = 1; j <= s[i][0]; j++) for(k = 1; k <= s[i - 1][0]; k++) if(!(s[i][j] & s[i - 1][k])) { f[i][j] += f[i - 1][k]; if(f[i][j] >= mod) f[i][j] -= mod; } for(i = 1; i <= s [0]; i++) { ans += f [i]; if(ans >= mod) ans -= mod; } printf("%d\n", ans); return 0; }View Code
相关文章推荐
- LuoguP1941[NOIP2014] 飞扬的小鸟 解题报告【背包型DP】
- [luoguP2948] [USACO09OPEN]滑雪课Ski Lessons(DP)
- [luoguP1433] 吃奶酪(DP || Dfs)
- [luoguP3413] SAC#1 - 萌数(数位DP)
- [luoguP1417] 烹调方案(背包DP)
- [luoguP1220] 关路灯(DP)
- [luoguP2157] [SDOI2009]学校食堂Dining(状压DP)
- [luoguP1868] 饥饿的奶牛(DP)
- [luoguP1507] NASA的食物计划(DP)
- [luoguP2758] 编辑距离(DP)
- [luoguP2285] [HNOI2004]打鼹鼠(DP)
- Corn Fields POJ - 3254 (状压dp)
- LuoguP1131[ZJOI2007] 时态同步 解题报告【树形DP(?)】
- poj 3254 Corn Fields dp状态压缩
- 纪念一下一道题,luoguP1417 DP
- [USACO06NOV]玉米田Corn Fields 解题报告(状压DP)
- [luoguP1773] 符文之语_NOI导刊2010提高(02)(DP)
- LuoguP1370 Charlie的云笔记序列 【dp】By cellur925
- [luoguP1077] 摆花(DP)
- [luoguP2701] [USACO5.3]巨大的牛棚Big Barn(DP)