【洛谷 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echarts的tree怎么控制位置_自动化考研保研面试—线性系统控制器设计

这个问题是我导师&#xff08;面试组长&#xff09;多次在保研考研面试的时候问过的&#xff0c;而且每年都会问&#xff01;问题其实不难&#xff0c;涉及的知识点也就是自控原理经典控制理论的部分&#xff0c;但是基本上很少有人能够完整地回答出来&#xff0c;不服的话请看…

PCF上的Spring Cloud合同和Spring Cloud Services

最近&#xff0c;我们有一个客户&#xff0c;对于使用Spring Cloud Contract &#xff08;SCC&#xff09;来防止微服务团队之间的API“漂移”&#xff0c;微型开发团队需要由单个开发团队来照顾构成企业应用程序一部分的单个API的想法非常感兴趣。 Spring Cloud Contract是Sp…

MS Lync2010客户端开发体会

和前身OCS2007 相比较&#xff0c;Lync2010原生客户端的扩展性大大缩小了&#xff0c;但是提供了很好的客户端SDK&#xff0c;整个系统架构也有较大变化。由于Lync2010原生客户端实在太简单&#xff0c;用惯了QQ的国人&#xff0c;实在无法接受以下功能的缺失&#xff1a; 组织…

date javascript 时区_第23节 Datejs 日期库-Web前端开发之Javascript-零点程序员-王唯

Datejs 是一个开源的JavaScript库&#xff0c;用来解析、格式化和处理日期数据&#xff0c;支持多种语言的日期格式处理&#xff1b;官网&#xff1a;www.datejs.com/Moment.js 是一个简单易用的轻量级JavaScript日期处理类库&#xff0c;提供了日期格式化、日期解析等功能。它…

制杖题

题目描述 求不大于 m 的、 质因数集与给定质数集有交集的自然数之和。 输入格式 第一行二个整数 n&#xff0c;m。 第二行 n 个整数&#xff0c;表示质数集内的元素 p[i]。 输出格式 一个整数&#xff0c;表示答案&#xff0c;对 376544743 取模。 输入输出样例 输入 #1复制 2 …

煤矿安全规程专家解读2016电子版_【学习】煤矿安全规程专家解读(165)

点击蓝字关注我们第二编 井工部分第三百三十三条爆破前&#xff0c;必须加强对机器、液压支架和电缆等的保护或将其移出工作面。爆破前&#xff0c;班组长必须亲自布置专人在警戒线和可能进入爆破地点的所有通路上担任警戒工作。警戒人员必须在安全地点警戒。警戒线处应设置警…

DC / OS中具有Java和数据库应用程序的服务发现

该博客将展示一个简单的Java应用程序如何使用DC / OS中的服务发现与数据库进行对话。 为什么要进行服务发现&#xff1f; 应用程序通常由多个组件组成&#xff0c;例如应用程序服务器&#xff0c;数据库&#xff0c;Web服务器&#xff0c;缓存和消息传递服务器。 通常&#xf…

RAC环境下创建本地数据文件的解决方法

引用收藏&#xff1a;http://blog.itpub.net/501889/viewspace-1083311/ 同事不小心&#xff0c;在RAC环境下创建了本地数据文件&#xff0c;这个肯定会出问题的&#xff0c;节点2不能访问此数据文件。其实发现做错了&#xff0c;立马删掉应该没有问题。数据文件还没有数据。下…

诺基亚n1平板电脑刷机教程_【个人记事本】闲鱼购买平板的经历

今年由于疫情原因&#xff0c;国内开展了全体学生在家学习的模式&#xff0c;这就避免不了老师发一些课件&#xff0c;还有一些录课的视频等电子学习资料等。考虑到开学复习的便利性&#xff08;平板比笔记本电脑更具有便携性&#xff0c;更方便&#xff09;。所以&#xff0c;…

找出一个字符串中出现次数最多的字_487,重构字符串

想了解更多数据结构以及算法题&#xff0c;可以关注微信公众号“数据结构和算法”&#xff0c;每天一题为你精彩解答。问题描述给定一个字符串S&#xff0c;检查是否能重新排布其中的字母&#xff0c;使得两相邻的字符不同。若可行&#xff0c;输出任意可行的结果。若不可行&am…

一、数据设计规范

一、数据设计规范 1、表的前缀 1、表名称不应该取得太长&#xff08;一般不超过三个英文单词。不推荐使用中文拼音&#xff0c;总的长度不要超过30个字符&#xff09; 格式:Tbl_Wms_log 表示 表_Wms系统_log 好处:执行查询方式辨别SQL类别(T_表-Table、V_视图-View、S_存储过…

http缓存管理器_小心缓存管理器

http缓存管理器如果使用spring和JPA&#xff0c;则很有可能利用ehcache&#xff08;或其他缓存提供程序&#xff09;。 您可以在两种不同的情况下进行此操作&#xff1a;JPA 2级缓存和spring方法缓存。 配置应用程序时&#xff0c;通常会设置JPA提供程序的二级缓存提供程序&am…

cad线加粗怎么设置_AutoCAD2019怎么加粗线条 将不同线段加粗方法

AutoCAD2019是一款非常专业的制图软件&#xff0c;那有很多用户表示自己不知道这款软件怎么加粗线条&#xff0c;下面就通过这篇文章给大家介绍一下&#xff0c;一起往下看吧&#xff01;如图所示&#xff0c;我用L命令绘制一根线段&#xff1a;&#xff0c;这根线段的宽度为默…

时间管理——你不可不知的3种时间管理方法

时间管理——你不可不知的3种时间管理方法 时间管理 英文名:Time Management   请问&#xff0c;如果每天都有86400元进入你的银行户头&#xff0c;而你必须当天用光&#xff0c;你会如何运用这笔钱&#xff1f;   天下真有这样的好事吗&#xff1f;   是的&#xff0c;…

python tkinter布局混用_[宜配屋]听图阁

这篇文章主要介绍了python tkinter控件布局项目实例,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下代码部分&#xff1a;from tkinter import *import tkinter.messagebox as messageboxclass Tkdemo():def __i…

ASP.NET中利用ashx实现图片防盗链

盗链的危害我就不说了&#xff0c;网上有很多。 直接分析盗链原理&#xff1a;看下面用httpwatch截获的http发送的数据 GET /Img.ashx?imgsvn_work.gif HTTP/1.1 Accept: */* Referer: http://www.svnhost.cn/ Accept-Language: zh-cn UA-CPU: x86 Accept-Encoding: gzip, def…

适用于Java开发人员的Elasticsearch:Java的Elasticsearch

本文是我们学院课程的一部分&#xff0c;该课程的标题为Java开发人员的Elasticsearch教程 。 在本课程中&#xff0c;我们提供了一系列教程&#xff0c;以便您可以开发自己的基于Elasticsearch的应用程序。 我们涵盖了从安装和操作到Java API集成和报告的广泛主题。 通过我们简…

matlab 日期排序_MATLAB时间序列的排序函数

sort功能&#xff1a;对时间序列x进行排序。格式&#xff1a;m sort(x, mode) % 当参数mode‘ascend’&#xff0c;表示对x进行升序重排&#xff1b;当mode‘descend’&#xff0c;表示降序重排wrev功能&#xff1a;得到时间序列x的逆序。格式&#xff1a;m wrev(x)如>>…

c标签foreach遍历list_遍历 Dictionary,你会几种方式?

一&#xff1a;背景 1. 讲故事昨天在 StackOverflow 上看到一个很有趣的问题&#xff0c;说: 你会几种遍历字典的方式&#xff0c;然后跟帖就是各种奇葩的回答&#xff0c;挺有意思&#xff0c;马上就要国庆了&#xff0c;娱乐娱乐吧&#xff0c;说说这种挺无聊的问题???。二…

[HDU 4666]Hyperspace[最远曼哈顿距离][STL]

题意: 许多 k 维点, 求这些点之间的最远曼哈顿距离. 并且有 q 次操作, 插入一个点或者删除一个点. 每次操作之后均输出结果. 思路: 用"疑似绝对值"的思想, 维护每种状态下各点的计算值, 插入或删除一个点就更新一次每种状态(用 multiset 或 map 或 priority_queue 实…