【洛谷 1879】玉米田
题目描述
农场主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】玉米田相关推荐
- [状压dp] 洛谷 P1879 玉米田
题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...
- 洛谷 P1825 [USACO11OPEN]玉米田迷宫Corn Maze
题目描述 去年秋天,奶牛们去参观了一个玉米迷宫,迷宫里有一些传送装置,可以将奶牛从一点到另一点进行瞬间转移.这些装置可以双向使用:一头奶牛可以从这个装置的起点立即到此装置的终点,同时也可以从终点出发, ...
- 洛谷P1879 [USACO06NOV]玉米田Corn Fields【状压dp】
P1879 [USACO06NOV]玉米田Corn Fields 时间限制 1.00s 内存限制 125.00MB 题目描述 Farmer John has purchased a lush new ...
- 洛谷P1879 [USACO06NOV]玉米田Corn Fields
P1879 [USACO06NOV]玉米田Corn Fields 题目描述 Farmer John has purchased a lush new rectangular pasture compo ...
- Corn fields(玉米田)状压dp入门第一题 洛谷P1879 poj3254
题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...
- 广度优先搜索——Corn Maze S(洛谷 P1825)
题目选自洛谷P1825 题目比较长,但是不难理解.因为求的是一个最短距离,所以用BFS即可. 广搜的主要思想便是将所有可行解(可到达的点)放入队列,然后再一个个遍历所有可行解(可到达的点),知道找到终 ...
- Luogu 3287 LOJ 2211 BZOJ 3594 [SCOI 2014] 方伯伯的玉米田 详解
[SCOI 2014] 方伯伯的玉米田 题解详^详详 温馨链接 洛谷3287 LOJ2211 BZOJ3594(3倍的快乐) 题目重述 在一个序列 hhh 上你可以最多执行 KKK 次操作,每次操作可 ...
- 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II
文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...
- 洛谷 P1550 浇水
洛谷 1550 浇水 题目背景 John的农场缺水了!!! 题目描述 Farmer John has decided to bring water to his N (1 <= N <= ...
最新文章
- mac上面启用托盘放大效果的方法
- 人工智能过于发达可能将后患无穷
- org.apache.maven.archiver.MavenArchiver.getManifest错误
- AUTOSAR从入门到精通100讲(四十一)-动态架构设计中的时序图
- 工作239:内容过长省略号失败 直接改的样式表
- js实现连接的两种放法
- 原生ajax通过post或者get下载文件,或处理IE浏览器因为后缀不能显示图片
- Bootstrap3 如何防止插件冲突
- 解决eclipse maven工程中src/main/resources目录下创建的文件夹所显示样式不是文件夹,而是“包“图标样式的问题
- 【重点】剑指offer——面试题36:数组中的逆序对
- 循环冗余校验码CRC
- DataBinding 的集成:点击AIL+Enter , 没有出现【convert to data binding layout】怎么办?
- 036.crud准备
- 图神经网络在推荐系统的应用!
- 一文读懂云原生数据湖体系
- C语言调用函数时参数传递实测(好久以前记录的)
- DevOps是MindSet:工具也好文化也罢,人员才是关键
- 百度:大型网站的 HTTPS 实践(上)
- 无盘服务器万兆网卡吃鸡报错,(2018.05.26)召唤绿化大师V3.2无盘万能包-xp-Win7x64
- [转载]Landsat(Path Row)与行政区划、经纬度对照-----转_庄启智_新浪博客
热门文章
- MySQL的索引优化
- 我来告诉你优秀的产品经理是如何管理需求的
- python教材目录,python 目录
- python 正整数 连续多个数之和_vijos - P1302连续自然数和 (公式推导 + python)
- openssh rpm包_100台CentOS7要升级OpenSSH怎么办?
- python中可用于布尔测试的,如何在Python中使用布尔值?
- python源码笔记_python源码学习笔记(二)
- 计算机课实验三,成都信息工程学院计算机网络课程实验三
- access无法与wincc链接_wincc和Access连接写如变量
- python写入并获取剪切板内容_python写入并获取剪切板内容