题目描述
农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地。John打算在牧场上的某几格里种上美味的草,供他的奶牛们享用。
遗憾的是,有些土地相当贫瘠,不能用来种草。并且,奶牛们喜欢独占一块草地的感觉,于是John不会选择两块相邻的土地,也就是说,没有哪两块草地有公共边。
John想知道,如果不考虑草地的总块数,那么,一共有多少种种植方案可供他选择?(当然,把新牧场完全荒废也是一种方案)
输入格式:
第一行:两个整数M和N,用空格隔开。
第2到第M+1行:每行包含N个用空格隔开的整数,描述了每块土地的状态。第i+1行描述了第i行的土地,所有整数均为0或1,是1的话,表示这块土地足够肥沃,0则表示这块土地不适合种草。
输出格式:
一个整数,即牧场分配总方案数除以100,000,000的余数。
输入输出样例
输入样例:
2 3
1 1 1
0 1 0
输出样例:
9

解析:
1.本题是个经典的状态压缩DP题

2.设f[i][j]表示从首行到第i行且第i行状态为j的方案数(j表示的是二进制转化为十进制的数,从00…0到11…1的数[m个0或1]。每一个0或者1表示种了玉米和没种玉米)
3.如果第i行和第i-1行没有冲突,且第i行左边没有相邻的1且满足贫瘠的土地上不种玉米,则f[i][j]+=f[i-1][k],j和k都表示(二进制)状态

4.如何判断j里面有没有存在相邻的1 ?。如果s&(s<<1)>0则有,=0则无。例如1101左移一位变成11010与01101相与结果是01000。有相邻的1.但是例如1001左移一位变成10010与01001相与结果是00000。没有相邻的1.

5.如何判断第i行和第i-1行没有冲突?如果第i行的二进制是j,i-1行的二进制是k,则判断j&k是否等于0就行了,如果等于0则不冲突,若不等于0则冲突。因为不等于0的时候必须有一对对应位两个都是1

6.如何判断贫瘠的土地不种玉米?把每行的a[i][j]转换成二进制存到另一个F[i]数组里面去。然后判断的时候只要((j&F[i])==j)则满足条件。如果都为1,满足条件!j不会改变还是1。若都为0,满足条件!j不会改变还是0。如果是j的第k位的二进制值是1,而F[i]的第k位的二进制值为0,这时,在贫瘠的土地上种了玉米,不符合条件!此时,j会改变成0。

7.注意细节!f[13][4100],F[4100]因为数字可以开到2的12次方4096。[查了好久才发现,为什么会WA呢……再说了数组开大不花钱(划掉)]

8.我打字好累的!!!
代码如下:

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int Mod=100000000;
int m,n,f[13][4100],F[4100],a[13][13],ans;
int main(){//freopen("a3254.in","r",stdin);//freopen("a3254.out","w",stdout);scanf("%d %d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&a[i][j]);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)F[i]=(F[i]<<1)+a[i][j];//把数组a[i][j]转换到F[i]二进制里面去 int se=1<<m;//m位的二进制 f[0][0]=1;for(int i=1;i<=n;i++)for(int j=0;j<se;j++)if(((j&(j<<1))==0) && ((j&F[i])==j)) //如果左边没有相邻的1且满足土地条件 for(int k=0;k<se;k++)if((j&k)==0)//i行的j状态的i-1行的k状态不冲突 f[i][j]=(f[i][j]+f[i-1][k])%Mod;//更新 for(int i=0;i<se;i++)ans=(ans+f[n][i])%Mod;//加上答案 printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/wuhu-JJJ/p/11138187.html

【洛谷 1879】玉米田相关推荐

  1. [状压dp] 洛谷 P1879 玉米田

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

  2. 洛谷 P1825 [USACO11OPEN]玉米田迷宫Corn Maze

    题目描述 去年秋天,奶牛们去参观了一个玉米迷宫,迷宫里有一些传送装置,可以将奶牛从一点到另一点进行瞬间转移.这些装置可以双向使用:一头奶牛可以从这个装置的起点立即到此装置的终点,同时也可以从终点出发, ...

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

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

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

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

  5. Corn fields(玉米田)状压dp入门第一题 洛谷P1879 poj3254

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

  6. 广度优先搜索——Corn Maze S(洛谷 P1825)

    题目选自洛谷P1825 题目比较长,但是不难理解.因为求的是一个最短距离,所以用BFS即可. 广搜的主要思想便是将所有可行解(可到达的点)放入队列,然后再一个个遍历所有可行解(可到达的点),知道找到终 ...

  7. Luogu 3287 LOJ 2211 BZOJ 3594 [SCOI 2014] 方伯伯的玉米田 详解

    [SCOI 2014] 方伯伯的玉米田 题解详^详详 温馨链接 洛谷3287 LOJ2211 BZOJ3594(3倍的快乐) 题目重述 在一个序列 hhh 上你可以最多执行 KKK 次操作,每次操作可 ...

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

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

  9. 洛谷 P1550 浇水

    洛谷 1550 浇水 题目背景 John的农场缺水了!!! 题目描述 Farmer John has decided to bring water to his N (1 <= N <= ...

最新文章

  1. mac上面启用托盘放大效果的方法
  2. 人工智能过于发达可能将后患无穷
  3. org.apache.maven.archiver.MavenArchiver.getManifest错误
  4. AUTOSAR从入门到精通100讲(四十一)-动态架构设计中的时序图
  5. 工作239:内容过长省略号失败 直接改的样式表
  6. js实现连接的两种放法
  7. 原生ajax通过post或者get下载文件,或处理IE浏览器因为后缀不能显示图片
  8. Bootstrap3 如何防止插件冲突
  9. 解决eclipse maven工程中src/main/resources目录下创建的文件夹所显示样式不是文件夹,而是“包“图标样式的问题
  10. 【重点】剑指offer——面试题36:数组中的逆序对
  11. 循环冗余校验码CRC
  12. DataBinding 的集成:点击AIL+Enter , 没有出现【convert to data binding layout】怎么办?
  13. 036.crud准备
  14. 图神经网络在推荐系统的应用!
  15. 一文读懂云原生数据湖体系
  16. C语言调用函数时参数传递实测(好久以前记录的)
  17. DevOps是MindSet:工具也好文化也罢,人员才是关键
  18. 百度:大型网站的 HTTPS 实践(上)
  19. 无盘服务器万兆网卡吃鸡报错,(2018.05.26)召唤绿化大师V3.2无盘万能包-xp-Win7x64
  20. [转载]Landsat(Path Row)与行政区划、经纬度对照-----转_庄启智_新浪博客

热门文章

  1. MySQL的索引优化
  2. 我来告诉你优秀的产品经理是如何管理需求的
  3. python教材目录,python 目录
  4. python 正整数 连续多个数之和_vijos - P1302连续自然数和 (公式推导 + python)
  5. openssh rpm包_100台CentOS7要升级OpenSSH怎么办?
  6. python中可用于布尔测试的,如何在Python中使用布尔值?
  7. python源码笔记_python源码学习笔记(二)
  8. 计算机课实验三,成都信息工程学院计算机网络课程实验三
  9. access无法与wincc链接_wincc和Access连接写如变量
  10. python写入并获取剪切板内容_python写入并获取剪切板内容