【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,你大概 ...
随机推荐
- @RequestBody发送请求报400错误
参数不使用@RequestBody 在使用Postman进行Post请求时,通常做法是填入key和value的值即可. 参数使用@RequestBody 使用@RequestBody注解时,在发送请求 ...
- SQL Server: create table sql script
---摇奖observeh数据库设计 Function getSpace lottery /* -- Author:geovindu 涂聚文 -- Date: 20180427 为了自写生成代码.根据 ...
- React中props和state相同点和不同点
朋友们,我想死你们了,最近这几天忙着和病魔作斗争所以没怎么写博客,今天感觉好点了,赶紧来写一波,就是这木敬业. 今天我们来讨论讨论props和state相同点和不同点 首先我来概要说明一下这两者 pr ...
- Echarts简单案例
官网: http://echarts.baidu.com/index.html 文档: http://echarts.baidu.com/echarts2/doc/doc.html <html ...
- 用animate改变了某个样式之后再用css控制会无效
我前几天写了个移动端运动,(这个运动的代码我贴在这了:http://www.cnblogs.com/weiman/p/6600380.html)然后发现了这个问题,具体如下: 未运动前是这样的,菜单栏 ...
- SuperMap空间数据处理与制图操作短视频汇总
转自:http://blog.csdn.net/supermapsupport/article/details/70227669 空间数据处理与制图是GIS系统建设最基础的部分,这里利用超图桌面软件- ...
- 使用光盘作为yum软件安装源安装X Window
使用光盘作为yum软件安装源安装X Window 挂载光驱 [root@centos6 ~]# mkdir /media/cdrom [root@centos6 ~]# mount /dev/ ...
- 通过url动态获取图片大小方法总结
很多时候再项目中,我们往往需要先获取图片的大小再加载图片,但是某些特定场景,如用过cocos2d-js的人都知道,在它那里只能按比例缩放大小,是无法设置指定大小的图片的,这就是cocos2d-js 的 ...
- SqlServer索引页损坏恢复
问题背景 运维操作失误,在没有正常关闭sqlserver的情况下,将服务器关闭了,重启后某些表损坏(应该是某些页损坏了,没有损坏的页还能访问到数据,但是访问损坏了的页就有问题),目前数据库只有4.20 ...
- MVC model验证 获取验证错误信息
public static class ModelStateExtensions { /// <summary> /// 获取model验证错误信息 /// </summary> ...