题目链接。

分析:

作为状态压缩DP入门题,很好。

由题意可知:

1.任意两牛(包括行和列)不能临近

2.牛只能在有草的即值为1的地方

3.不放牛也为一种方案

定义dp[i][s]为第i行状态s下的方案数。

dp[i][s] = ∑(dp[i-1][s']),其中s'为不与s冲突的状态

注意:

因为位运算优先级很低,所以要多加括号。因此

if((cow & (cow<<1)) != 0) return 0;
和
if(cow & (cow<<1) != 0) return 0;
是不一样的

#include <cstdio>
#include <cstring>#define MAXN 13
#define MODNUM 100000000int n, m;
int filter[MAXN];
int dp[MAXN][1<<MAXN];int check(int cow, int grass){if((cow & grass) != cow) return 0;  //检测牛是否都在有草的地方,如果否返回0if((cow & (cow<<1))) return 0;  //该行是否有两牛相邻,有就返回0return 1;
}void solve(){int i, j, itype, k, ans;memset(dp, 0, sizeof(dp));dp[0][0] = 1;itype = (1<<m);for(i=1; i<=n; i++){for(j=0; j<itype; j++){if(check(j, filter[i])){for(k=0; k<itype; k++){if((j&k) == 0){ //保证对于该行j状态与上一行k状态,两行间没有临近的牛dp[i][j] = (dp[i][j] + dp[i-1][k]) % MODNUM;}}}}}ans = 0;for(i=0; i<itype; i++){ans = (ans+dp[n][i]) % MODNUM;}printf("%d\n", ans);
}int main(){int i, j, t;scanf("%d %d", &n, &m);for(i=1; i<=n; i++){filter[i] = 0;for(j=0; j<m; j++){scanf("%d", &t);filter[i] = (filter[i]<<1)+t;   //将每行草地用二进制表示
        }}solve();return 0;
}

转载于:https://www.cnblogs.com/tanhehe/archive/2013/04/11/3014334.html

POJ3254 Corn Fields(状态压缩DP)相关推荐

  1. poj 3254 Corn Fields 状态压缩dp

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K       Description Farmer John has purchased a ...

  2. poj - 3254 Corn Fields (状态压缩dp入门)

    http://poj.org/problem?id=3254 参考:http://blog.csdn.net/accry/article/details/6607703 农夫想在m*n的土地上种玉米, ...

  3. poj 3254 Corn Fields (状态压缩DP)

    题目:http://poj.org/problem?id=3254 思路见代码: #include<iostream> using namespace std;const int MOD= ...

  4. poj3254 Corn Fields 状压DP入门

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 19368   Accepted: 10169 Des ...

  5. POJ 3254 Corn Fields (状态压缩)

    刚开始的思路是  把0-2^x的 所有状态枚举, 然后找符合条件的,   但是 发现 当12*12 时  1的数量x 超过64  这是个庞大的数字, 跟本就没法枚举: 想到用状态压缩,  但是 怎么压 ...

  6. POJ3254Corn Fields——状态压缩dp

    题目:http://poj.org/problem?id=3254 1.枚举行: 2.把有影响的"放不放牛"加入参数中,用二进制数表示该位置放不放牛,再用十进制数表示二进制数: 3 ...

  7. 状态压缩dp入门 第一题 POJ 3254 Corn Fields

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6460   Accepted: 3436 Descr ...

  8. 状态压缩DP(大佬写的很好,转来看)

    奉上大佬博客 https://blog.csdn.net/accry/article/details/6607703 动态规划本来就很抽象,状态的设定和状态的转移都不好把握,而状态压缩的动态规划解决的 ...

  9. 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)

    目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...

  10. [POJ3254]Corn Fields

    [POJ3254]Corn Fields 试题描述 Farmer John has purchased a lush new rectangular pasture composed of \(M\) ...

最新文章

  1. linux 运维shell习题
  2. python朋友圈表白_情人节「告白生成器」来了!这个AI能让偶像对你说情话,过于真实!...
  3. 留言条.html .js来完成
  4. 老弟做了个网盘,炸了!
  5. python3.7怎么安装turtle_python3绘图程序教学:载入和查询Turtle模组(一)
  6. matlab划分训练集验证和测试集代码_数据集划分为训练集和测试集并生成标签--matlab代码...
  7. GPS开发、定位修改
  8. 深度学习声纹识别_一种基于机器学习及深度学习的声纹降噪方法及系统与流程...
  9. 西门子1200控制V90伺服,西门子1200通过PN通讯控制 V90伺服,程序控制采用FB285功能块
  10. 项目中统一日志文件配置
  11. 论文笔记Understanding and Diagnosing Visual Tracking Systems
  12. 网络复现之基于TPS的STN网络
  13. 本科操作系统学习笔记(上篇)
  14. Vue3+Quasar实现ins风格图片墙
  15. 计算机操作系统实训心得总结,计算机操作系统安全实训心得总结
  16. 学习 FPGA 经验与书籍分享。
  17. cmmi3级认证有什么要求?参与人员都有哪些
  18. 树莓派与声音传感器 python
  19. Qt TCP/IP语音
  20. 使用jdk查看jks文件信息

热门文章

  1. spark 过滤log
  2. DButils入门及结果处理器选择
  3. Ubnutu20.04安装Tensorflow
  4. BRVAH(让RecyclerView变得更高效) (3)
  5. Android 与 unity3d 基于微信授权、支付、分享,QQ分享,支付宝支付的交互
  6. 仅为代码实际运行资源付费 解构国内首个函数计算
  7. 检查某个网段存活的主机_shell脚本
  8. Java Web整合开发(37) -- SVN
  9. linux awk数组使用
  10. XP的常见蓝屏代码和解决方案