【HNOI 模拟】Axonometric Projection

本文探讨了一种计算由1×1×1小方块堆砌而成的物体,在给定正视图和侧视图高度条件下,可行的堆砌方案数量的方法。通过排序高度限制块并独立考虑每一块的影响,文章提供了一个基于容斥原理的解决方案,同时分析了最坏时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意

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

物块长宽n50


分析

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

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值