【HNOI 模拟】Axonometric Projection
2015-08-29 16:19
211 查看
题目大意
给出一个由若干1×1×11\times1\times1的小方块堆砌而成的物体的正视图和侧视图(每一个行或列上对应的高度 ),求有多少种可行的堆砌方案。物块长宽n≤50n\leq50
分析
首先一个比较巧妙的转化就是给出的正视图侧视图的高度顺序并不重要,我们可以先将它排序以便后续的操作。然后一个很重要的转化就是不同的高度限制块(一整块他们都要求可视高度为某个值hh)之间是互相独立的,最终答案是他们分别的方案数乘起来。
考虑如果我们暴力解决这个问题,使用容斥原理。
那么终答案就是总数减去强制至少11个行或列不满足,加上强制至少22个列不满足,以此类推。
首先倘若我们没有将其排序,那么我们需要2n+m2^{n+m}地枚举这些行或列。当我们排完序后,只需要枚举有多少的行或列不满足,乘上一个组合数就可以了。
其次我们不难发现排序后的同一高度限制块必定是一个LL字型,并且限制比它高的部分都在LL的内侧,也就是说比它高的部分不会对它造成影响,而比它矮的部分本来就不影响。也就是说它彻底独立出来了。
剩下的就是简单的计算问题了。
最坏时间复杂度O(nm⋅log(nm))O(nm\cdot log(nm))
相关文章推荐
- [leetcode]Isomorphic Strings C语言
- Qt 学习之路 2(2):Qt 简介 笔记
- Spring Task定时任务Scheduled
- 利用SQL语句重置数据库中所有表的标识列(自增量)
- bzoj1721 [Usaco2006 Mar]Ski Lift 缆车支柱(dp)
- linux系统安装和使用SVN经验和遇到的问题
- Javascript高级程序设计——javascript简介
- Linux学习笔记----Linux 系统管理----系统定时任务
- 移植lame-3.99.5库
- 从数据看微创软件和BAT三个大公司的员工身价差距
- 威尔逊定理的应用
- UILabel的宽度自适应文字
- iOS URI跳转方式地图导航的代码实践
- 程序员面试中常见10大算法汇总
- servlet中doPost()和doGet()
- 虚拟机字节码执行引擎(帧栈运行结构、方法调用分派)
- leetcode 221: Maximal Square
- 解决spring的dubbo配置文件报错解决思路
- C/C++编译和链接过程详解 (重定向表,导出符号表,未解决符号表)
- libgdx API之Collection:游戏用容器