题目大意
给出一个由若干 1×1×1 的小方块堆砌而成的物体的正视图和侧视图(每一个行或列上对应的高度 ),求有多少种可行的堆砌方案。
物块长宽 n≤50
分析
首先一个比较巧妙的转化就是给出的正视图侧视图的高度顺序并不重要,我们可以先将它排序以便后续的操作。
然后一个很重要的转化就是不同的高度限制块(一整块他们都要求可视高度为某个值 h )之间是互相独立的,最终答案是他们分别的方案数乘起来。
考虑如果我们暴力解决这个问题,使用容斥原理。
那么终答案就是总数减去强制至少
首先倘若我们没有将其排序,那么我们需要
其次我们不难发现排序后的同一高度限制块必定是一个
L
字型,并且限制比它高的部分都在
剩下的就是简单的计算问题了。
最坏时间复杂度 O(nm⋅log(nm))