【Topcoder 10524】BrickPuzzle
Topcoder 10524
题意:给一个\(n\times m\)的棋盘,上面有一些格子是白色的,需要被一些俄罗斯方块们覆盖,俄罗斯方块有\(4\)种:

然后这些图案不能重叠或超出边界,并且每一个图案有无限个。问最少要用多少个图案来覆盖原图。
思路:由于\(m\)比较小,所以我们考虑状压\(dp\)。
考虑\(dp(x,y,mask)\)表示当前在\((x,y)\)这个位置,\(mask\)表示从\((x,y)\)开始\(m+2\)个格子是否被覆盖的状态,最少需要用的图案数量。
之所以这样是因为绿色图案是最多需要\((x+1,y+2)\)这个格子,所以\((x,y)..(x+1,y+2)\)这\(m+3\)个格子按理说都要记录,但是\((x+1,y+2)\)在\((x,y-1)\)的时候根本不会去更新,所以直接记录\((x,y)..(x+1,y+1)\)这\(m+2\)个格子就可以了。
然后考虑转移。首先考虑这\(4\)种图案所对应的\(mask\)需要更改的位置。
- \(0、1、2、3\)
- \(0、1、m+1、m+2\)
- \(0、1、m、m+1\)
- \(1、2、m、m+1\)
然后就可以更改状态到\(nmask\)了。这里其实可以预处理出每一个图案对应更改的\(mask\),加快更新速度。
还有一种可能是这个格子就不放图案,那么必须要判断\(mask\)的第\(0\)位是否已经被覆盖或者是黑色格子不用被覆盖,如果不行就不能转移。
写的时候需要特别注意细节!!!
直接这样写是会\(tle\)或\(mle\)的,所以考虑优化。
- 用滚动数组,再用哈希表来存储\(mask\)。导致的结果:\(ac,4.2e5ms\)
- 考虑\(has_{x,y}\)表示从\((x,y)\)开始\(m+2\)个格子中哪些是白色的,然后如果当前放置的那个图案覆盖到的所有的都是黑色的,那么肯定不应该去更新这个状态。导致的结果:\(2.9e5ms\)
- 更改哈希表的哈希模数,以及增加一些\(register\)优化,导致的结果:\(2.4e5ms\)
暂时做不到更好了。
所以这告诉我们一些道理:
- 哈希表永远是状压\(dp\)的好朋友
- 调参永远是卡常的好朋友
- 多想一些小小的优化(比如这个\(has\)数组)永远是拿高分的保障
【Topcoder 10524】BrickPuzzle的更多相关文章
- 【Topcoder 10384】KingdomMap
Topcoder 10384 题意:给你一个森林,求是否能将这个森林的点集分成两部分,每部分放在一列中,要求边是直的并且不能交叉,问最少删哪几条边. 思路:我们考虑森林中的一棵树,以\(u\)为根,将 ...
- 【Topcoder 10107】TeamManagement
Topcoder 10107 题意:给定一棵树,其中有些点是忠诚的,现在要选k个点,每个选择的联通块都必须包含一个忠诚的点,求包含某个点的概率. 思路:考虑树型\(dp\),\(dp(i,j,0/1, ...
- 【Topcoder 1879】Scheduling
题意:给一个\(dag\),每一个点有一个访问时间. 现在可以同时访问两个点,但当连向这个点的所有点都被访问完成后才可以访问这个点. 问最短访问时间. 思路:一眼贪心.可惜是错的. 第二眼暴搜.就这么 ...
- 【Topcoder 10689】TheSoccerDivOne
题意:给\(n\)个队伍的积分,它们要踢足球,每个队伍剩下4场没有踢. 问踢完后\(0\)队伍最高排名. 思路:首先想了贪心,可惜不对. 那么老实dp. 首先:每个队伍具体和哪个人踢了没有关系. 那么 ...
- 【Topcoder 8572】TheLuckySum
题意:给一个数\(n\),要把它分成lucky numbers的和. 问个数最少.字典序最小的方案. 思路:果断搜索.个数最少,所以迭代加深.枚举要的个数\(m\). 首先我们看\(n\)的个位.它肯 ...
- 【Topcoder 1643】PossibleOrders
题意:给一些等价关系,问把所有的数按照大小排序的种类数. 思路:首先并查集维护等价类,然后设有\(n\)个等价类. 那么就可以\(dp\)了. 考虑\(dp(i)\)表示还剩下\(i\)个等价类,答案 ...
- 【topcoder SRM 702 DIV 2 250】TestTaking
Problem Statement Recently, Alice had to take a test. The test consisted of a sequence of true/false ...
- 【AR实验室】mulberryAR : ORBSLAM2+VVSION
本文转载请注明出处 —— polobymulberry-博客园 0x00 - 前言 mulberryAR是我业余时间弄的一个AR引擎,目前主要支持单目视觉SLAM+3D渲染,并且支持iOS端,但是该引 ...
- 【.net 深呼吸】细说CodeDom(1):结构大观
CodeDom 是啥东东?Html Dom听过吧,XML Dom听过吧.DOM一般可翻译为 文档对象模型,那 Code + DOM呢,自然是指代码文档模型了.如果你从来没接触过 CodeDom,你大概 ...
随机推荐
- 【20】策略者模式(Strategy Pattern)
一.引言 本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解. 二.策略者模式介绍 2.1 策略模式的定义 在现实生活中,策略模式的 ...
- 解决vue-cli不能初始化webpack模板的问题(vue init卡住了,解决办法)
报这个错误 有人说是代理问题.我也不懂,但这个方法有用 1.去github上下载要初始化的模板 https://github.com/vuejs-templates/webpack 或者直接用git去 ...
- OAuth2.0的refresh token
最近看人人网的OAuth认证,发现他是OAuth2.0,之前一直看的是新浪的OAuth,是OAuth1.0. 二者还是有很多不同的,主要的不同点在access token的获取方式. OAuth1.0 ...
- thinkphp链接多个数据库时怎么调用M方法?
老项目tp3.1.3,有N个数据库,thinkphp好久没用了,不知道怎么用M方法了,代码测验成功! 数据库名称: 2.直接上代码 $custom = M('base','branch_','shop ...
- Django Rest framework 之 序列化
RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...
- cf1130E. Wrong Answer(构造)
题意 题目链接 Sol 对构造一无所知... 题解的方法比较神仙,,设第一个位置为\(-1\),\(S = \sum_{i=1}^n a_i\) 那么我们要让\(N * S - (N - 1) * ( ...
- 2018-01-17 Antlr4实现简单语言之整数比较表达式
续上文Antlr4: 修改语法规则更接近普通BNF格式. 例程 为先=1 为先 为2 => 返回false '为'作为关键词, 与数字可以连写, 但必须与变量名用空格间隔: 变量一=1 变量二= ...
- springboot 配置文件说明
你可以在自己创建的组件上使用@ConfigurationProperties注解,而Spring Boot自动配置的很多组件也添加了@ConfigurationProperties注解,可以通过Spr ...
- “一切都是消息”--iMSF(即时消息服务框架)之【发布-订阅】模式
MSF的名字是 Message Service Framework 的简称,由于目前框架主要功能在于处理即时(immediately)消息,所以iMSF就是 immediately Message S ...
- 《数据库系统概念》4-DDL、集合运算、嵌套子查询
一.DDLa) SQL Data DefinitionSQL的基本数据类型有char(n).varchar(n).int.smallint.numeric(p,d).real,double preci ...