题意:

给出一个n×m的玉米地,即一个01矩阵,1上的格子可以种地,0不可以,两个相邻的格子不能同时种地,求种地的方案数。

题解:

状压dp;

由于每一行的状态受到上一行的限制,所以肯定要考虑枚举这一行的状态和上一行的状态;

而当前这一行的状态又会受到一些限制,所以考虑如何防止不合法的状态被转移到;

1、没有相邻玉米地的状态,这个可以预处理判断;

2、当前这一行的状态必须是原图的一个子集;

3、判断上一行和这一行没有相邻的玉米地;

三个同时成立即可转移

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
#define N 13
#define mo 100000000
using namespace std;int dp[N][1<<N],g[1<<N],f[N];int gi() {int x=0,o=1; char ch=getchar();while(ch!='-' && (ch<'0' || ch>'9')) ch=getchar();if(ch=='-') o=-1,ch=getchar();while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return o*x;
}int main() {int n=gi(),m=gi(),ans=0;for(int i=1; i<=n; i++)for(int j=1; j<=m; j++) {int x=gi();f[i]=(f[i]<<1)+x;//状压这一行的状态}for(int s=0; s<1<<m; s++) {if(!((s<<1)&s && (s>>1)&s)) g[s]=1;//1、判断这一行是否有两个相邻的草地}dp[0][0]=1;for(int i=1; i<=n; i++) {for(int s=0; s<1<<m; s++) {if((s&f[i])==s && g[s]) {//2、第一个条件成立当且仅当s是t[i]的一个子集for(int k=0; k<1<<m; k++) {//k若不合法,则不会被转移,所以不判断k是否合法也无妨if(!(s&k)) (dp[i][s]+=dp[i-1][k])%=mo;//3、上下不相交}}}}for(int s=0; s<1<<m; s++) {(ans+=dp[n][s])%=mo;}printf("%d", ans);return 0;
}

转载于:https://www.cnblogs.com/HLXZZ/p/7700571.html

[poj3254] Corn Fields相关推荐

  1. [POJ3254]Corn Fields

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

  2. poj3254 Corn Fields 状压DP入门

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

  3. poj3254 Corn Fields

    Description Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; ...

  4. POJ 3254 poj3254 Corn Fields

    题意:给出一个n行m列的草地,1表示肥沃,0表示贫瘠,现在要把一些牛放在肥沃的草地上,但是要求所有牛不能相邻,问你有多少种放法. 思路: DP[i][j]=sum(dp[i-1][k]); i表示当前 ...

  5. Corn Fields——POJ3254状态压缩Dp

    Corn Fields Description Farmer John has purchased a lush new rectangular pasture composed of M by N ...

  6. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

  7. POJ - 3254 - Corn Fields

    线上题目: Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6936   Accepted: 3697 ...

  8. poj 3254 Corn Fields 状态压缩dp

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

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

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

最新文章

  1. LetCode: 150. 逆波兰表达式求值
  2. UnrealEngine4 - 关于UObject被自动GC垃圾回收的巨坑
  3. 我的游测之路 | 揭秘游戏测试神秘面纱(一)
  4. c#解析json字符串数组_c#解析json字符串处理(最清晰易懂的方法)
  5. CentOS更改yum源与更新系统
  6. halcon 纹理检测_halcon学习网
  7. 网卡MAC地址查询厂商
  8. 管理_立项任务书怎么写——毛宇菲
  9. [ZigBee] 15、Zigbee协议栈应用(一)——Zigbee协议栈介绍及简单例子(长文,OSAL及Zigbee入门知识)...
  10. c语言引用win api,C调用WinAPI及窗口过程
  11. 【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:3.2 分式化简。设计算法,将一个给定的真分数化简为最简分数形式。例如,将6/8化简为3/4
  12. 《区块链技术与应用》公开课系列笔记——目录导航页
  13. java导出eml_java 本地生成带附件的eml文件
  14. 日本泡沫经济时期的普通百姓
  15. PHP之深度剖析:网站唯一登录,踢人效果
  16. 关于音频情感分类的随笔(2)
  17. 原生JS实现PC端无缝滚动轮播图、匀速轮播图、匀速动画
  18. 十一、Gio Resource
  19. 广域网优化技术领跑IT投资
  20. 怎么样查找高反链域名?

热门文章

  1. 生日快乐html_生日快乐,我的祖国
  2. 管家婆有未记账的凭证怎么办_管家婆常见问题
  3. python可以修图吗_会照片处理的不只是ps,还有Python!
  4. 在网站推广的道路中同样的起点,知乎豆瓣却走上了不相交的两条路
  5. 网络推广外包专员浅析为何网站网络推广外包中有排名却没有转化率
  6. 搭建多语言外文网站需要注意三个细节问题
  7. java封装的特性,java的三大特性(封装、继承、多态)
  8. Json解析不允许子类父类变量重名的原因
  9. android studio插件相关(逐步完成系列)
  10. python pipe stdout 实现cat|grep 功能