【HNOI 模拟】Axonometric Projection

来源:互联网 发布:淘宝用别人身份证开店 编辑:程序博客网 时间:2024/06/06 23:58

题目大意

给出一个由若干1×1×1的小方块堆砌而成的物体的正视图和侧视图(每一个行或列上对应的高度 ),求有多少种可行的堆砌方案。

物块长宽n50


分析

首先一个比较巧妙的转化就是给出的正视图侧视图的高度顺序并不重要,我们可以先将它排序以便后续的操作。

然后一个很重要的转化就是不同的高度限制块(一整块他们都要求可视高度为某个值h)之间是互相独立的,最终答案是他们分别的方案数乘起来。

考虑如果我们暴力解决这个问题,使用容斥原理。
那么终答案就是总数减去强制至少1个行或列不满足,加上强制至少2个列不满足,以此类推。

首先倘若我们没有将其排序,那么我们需要2n+m地枚举这些行或列。当我们排完序后,只需要枚举有多少的行或列不满足,乘上一个组合数就可以了。

其次我们不难发现排序后的同一高度限制块必定是一个L字型,并且限制比它高的部分都在L的内侧,也就是说比它高的部分不会对它造成影响,而比它矮的部分本来就不影响。也就是说它彻底独立出来了。

剩下的就是简单的计算问题了。

最坏时间复杂度O(nmlog(nm))

0 0
原创粉丝点击