P1879 [USACO06NOV]Corn Fields G

https://www.luogu.com.cn/problem/P1879

首先这道题,一般的区间DP状态不太好设计,很难确定父子关系。

这道题有很鲜明的特征:

1.01矩阵

2.1 ≤ M ≤ 12; 1 ≤ N ≤ 12

所以这就使人很容易想到状压DP。

下面详细说说:

f[i][j]表示前[i]行的状态为j时的合法方案数

mp[i]刻画的是土地

possi[i]判断是否合法

步骤:

1.读进来土地,把它二进制转十进制

2.判断草地是否相邻,即是否有连续的1。(i与他的左移一位和右移一位,分别做&运算,如果都都等于0,那么合法)举个例子:

比如说 6→110 (有连续的两个1,是个不合法的)

    1 1 0                 1 1 0

& 0 1 1                 1 0 1

得:0 1 0(×)    1 0 0(×)

3.再枚举每行可能状态,判断是否有种在贫瘠土地上的情况。什么叫种在贫瘠土地上呢?就是原本土地(i,j)这个格子上是个0,你却冒出来个1,就是不行的。这有两种判断合法的方式:(j&mp[i])==j和(j|mp[i])==mp[i]。仍然举个例子:

j       0 1 0                        0 1 0

mp   0 0 1                        0 0 1

&得  0 0 0 (×)     |得: 0 1 1(×)

 AC Code:

#include <bits/stdc++.h>
using namespace std;
const int mo=1e8;
int n,m,maxn,mp[13],f[13][9000],ans;
bool possi[9000];int main()
{int x;cin>>m>>n;maxn=1<<n;f[0][0]=1;for(int i=1;i<=m;i++)for(int j=1;j<=n;j++){cin>>x;mp[i]=(mp[i]<<1)+x;//二进制转十进制 }for(int i=0;i<maxn;i++)if(!(i&(i<<1))&&!(i&(i>>1)))//判断草地是否相邻 possi[i]=true;for(int i=1;i<=m;i++)//枚举每行 for(int j=0;j<maxn;j++)//可能的状态,从00..0.~111..1 {if(possi[j]&&(j&mp[i])==j)//如果状态合法(没有相邻的1)且没有种在贫瘠的土地上 for(int k=0;k<maxn;k++)//找上一行的合法情况 if(!(k&j))//与该行状态取&不为真(0)//说明上一行与这一行不存在任意一块草地有公共边f[i][j]=(f[i][j]+f[i-1][k])%mo;//记录 }for(int i=0;i<maxn;i++)ans=(ans+f[m][i])%mo;cout<<ans<<endl;return 0;
}   

P1879 [USACO06NOV]Corn Fields G相关推荐

  1. 【每日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 ...

  2. 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II

    文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...

  3. 洛谷P1879 [USACO06NOV]玉米田Corn Fields

    P1879 [USACO06NOV]玉米田Corn Fields 题目描述 Farmer John has purchased a lush new rectangular pasture compo ...

  4. 洛谷P1879 [USACO06NOV]玉米田Corn Fields【状压dp】

    P1879 [USACO06NOV]玉米田Corn Fields 时间限制 1.00s 内存限制 125.00MB 题目描述 Farmer John has purchased a lush new ...

  5. [USACO06NOV]玉米田Corn Fields题解

    [USACO06NOV]玉米田Corn Fields题解 --HM 题目描述 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都 ...

  6. POJ - 3254 - Corn Fields

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

  7. poj 3254 Corn Fields 状态压缩dp

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

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

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

  9. poj3254 Corn Fields 状压DP入门

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

最新文章

  1. python re match groups_python re.match与re.search的区别
  2. R语言可视化绘制及PDF使用字体参数列表:查看字体列表、可视化绘制图像中的字体参数列表、字体示例并写入pdf
  3. 期末复习、化学反应工程科目(第四章)
  4. BZOJ1787 [Ahoi2008]Meet 紧急集合 LCA
  5. php Heredoc应用说明
  6. web developer tips (55):多项目解决方案中设置启动项
  7. 分析JobInProgress中Map/Reduce任务分配
  8. 查找重复文件_快速查找、删除重复图片及文件!
  9. 米奇emoji_一些常用的 Emoji 符号(可直接复制)
  10. JAVA从url中分离ip和port
  11. c++编写COM组件,并使用该组件
  12. 服务器上显示公式,Markdown中实时显示数学公式的方法
  13. 一级域名是什么?和二级域名有什么区别?
  14. error:Fatal error: Uncaught -- Smarty Compiler: Syntax error in template D:\sms\xampp\htdocs\lanyu
  15. centos7.6安装博通无线网卡驱动
  16. 完全手册-MATLAB使用详解:基础、开发及工程应用
  17. 【吴恩达深度学习】——NLP和Word Embedding
  18. 用Canvas画漫天繁星吧~
  19. 利用有道翻译Api实现英文翻译功能
  20. 关于hashmap的深入-hashmap产生死锁的详解

热门文章

  1. Linux命令之在终端显示「一头牛」
  2. 搭建Android+QT+OpenCV环境,实现“单色图片着色”效果
  3. Word文档目录自动生成和页码设置
  4. Cassandra实例
  5. 打开Jupyter报错:EnvironmentLocationNotFound: Not a conda environment
  6. Qt 制作安装程序(使用 binarycreator.exe)
  7. 用Floyd算法解决选址问题(附完整matlab代码)
  8. Linux文件、目录——鸟哥的Linux私房菜
  9. 华为计算机品牌及型号怎么查,华为电脑怎么看型号
  10. 2021---长安“战疫”网络安全卫士守护赛 Writeup