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的更多相关文章

  1. 【Topcoder 10384】KingdomMap

    Topcoder 10384 题意:给你一个森林,求是否能将这个森林的点集分成两部分,每部分放在一列中,要求边是直的并且不能交叉,问最少删哪几条边. 思路:我们考虑森林中的一棵树,以\(u\)为根,将 ...

  2. 【Topcoder 10107】TeamManagement

    Topcoder 10107 题意:给定一棵树,其中有些点是忠诚的,现在要选k个点,每个选择的联通块都必须包含一个忠诚的点,求包含某个点的概率. 思路:考虑树型\(dp\),\(dp(i,j,0/1, ...

  3. 【Topcoder 1879】Scheduling

    题意:给一个\(dag\),每一个点有一个访问时间. 现在可以同时访问两个点,但当连向这个点的所有点都被访问完成后才可以访问这个点. 问最短访问时间. 思路:一眼贪心.可惜是错的. 第二眼暴搜.就这么 ...

  4. 【Topcoder 10689】TheSoccerDivOne

    题意:给\(n\)个队伍的积分,它们要踢足球,每个队伍剩下4场没有踢. 问踢完后\(0\)队伍最高排名. 思路:首先想了贪心,可惜不对. 那么老实dp. 首先:每个队伍具体和哪个人踢了没有关系. 那么 ...

  5. 【Topcoder 8572】TheLuckySum

    题意:给一个数\(n\),要把它分成lucky numbers的和. 问个数最少.字典序最小的方案. 思路:果断搜索.个数最少,所以迭代加深.枚举要的个数\(m\). 首先我们看\(n\)的个位.它肯 ...

  6. 【Topcoder 1643】PossibleOrders

    题意:给一些等价关系,问把所有的数按照大小排序的种类数. 思路:首先并查集维护等价类,然后设有\(n\)个等价类. 那么就可以\(dp\)了. 考虑\(dp(i)\)表示还剩下\(i\)个等价类,答案 ...

  7. 【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 ...

  8. 【AR实验室】mulberryAR : ORBSLAM2+VVSION

    本文转载请注明出处 —— polobymulberry-博客园 0x00 - 前言 mulberryAR是我业余时间弄的一个AR引擎,目前主要支持单目视觉SLAM+3D渲染,并且支持iOS端,但是该引 ...

  9. 【.net 深呼吸】细说CodeDom(1):结构大观

    CodeDom 是啥东东?Html Dom听过吧,XML Dom听过吧.DOM一般可翻译为 文档对象模型,那 Code + DOM呢,自然是指代码文档模型了.如果你从来没接触过 CodeDom,你大概 ...

随机推荐

  1. 【20】策略者模式(Strategy Pattern)

    一.引言 本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解. 二.策略者模式介绍 2.1 策略模式的定义 在现实生活中,策略模式的 ...

  2. 解决vue-cli不能初始化webpack模板的问题(vue init卡住了,解决办法)

    报这个错误 有人说是代理问题.我也不懂,但这个方法有用 1.去github上下载要初始化的模板 https://github.com/vuejs-templates/webpack 或者直接用git去 ...

  3. OAuth2.0的refresh token

    最近看人人网的OAuth认证,发现他是OAuth2.0,之前一直看的是新浪的OAuth,是OAuth1.0. 二者还是有很多不同的,主要的不同点在access token的获取方式. OAuth1.0 ...

  4. thinkphp链接多个数据库时怎么调用M方法?

    老项目tp3.1.3,有N个数据库,thinkphp好久没用了,不知道怎么用M方法了,代码测验成功! 数据库名称: 2.直接上代码 $custom = M('base','branch_','shop ...

  5. Django Rest framework 之 序列化

    RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...

  6. cf1130E. Wrong Answer(构造)

    题意 题目链接 Sol 对构造一无所知... 题解的方法比较神仙,,设第一个位置为\(-1\),\(S = \sum_{i=1}^n a_i\) 那么我们要让\(N * S - (N - 1) * ( ...

  7. 2018-01-17 Antlr4实现简单语言之整数比较表达式

    续上文Antlr4: 修改语法规则更接近普通BNF格式. 例程 为先=1 为先 为2 => 返回false '为'作为关键词, 与数字可以连写, 但必须与变量名用空格间隔: 变量一=1 变量二= ...

  8. springboot 配置文件说明

    你可以在自己创建的组件上使用@ConfigurationProperties注解,而Spring Boot自动配置的很多组件也添加了@ConfigurationProperties注解,可以通过Spr ...

  9. “一切都是消息”--iMSF(即时消息服务框架)之【发布-订阅】模式

    MSF的名字是 Message Service Framework 的简称,由于目前框架主要功能在于处理即时(immediately)消息,所以iMSF就是 immediately Message S ...

  10. ​《数据库系统概念》4-DDL、集合运算、嵌套子查询

    一.DDLa) SQL Data DefinitionSQL的基本数据类型有char(n).varchar(n).int.smallint.numeric(p,d).real,double preci ...