习题7-6 重叠的正方形 UVa12113

博客详细解析了UVa12113题目,通过暴力搜索方法解决重叠正方形的问题。首先探讨了错误的尝试,如先标记再画方格和按露头数量讨论的不足。接着提出正确解决方案,将输入转换为01序列,并枚举正方形的9种摆放方式。描述正方形使用边界和中间空格的下标,模拟重叠过程。博主强调了暴力搜索中明确枚举对象和描述方式的重要性,并提到了时间复杂度及加速措施。
摘要由CSDN通过智能技术生成

1.题目描述:点击打开链接

2.解题思路:本题利用暴力搜索解决。一开始我的思路有点问题,想着先把所有方格给标记出来,然后从面积最小的方格开始,一个一个画,最后判断是否和原来相等。但这样带来的问题是有的正方形的摆放位置有多种可能,无法判断具体是哪一种。因此只画一次就判断结果肯定是片面的。所以最终否定了这种做法。接下来想着能否根据正方形露出来的个数来分情况讨论是否合法。如果遇见非法情况就输出No。不过最后发现又是考虑不周,比如正方形只露出来左上角和右下角这种情况就没有考虑在内,加上合法情况和非法情况都比较多,这种方法也宣告失败。

其实,正确的做法应该是枚举所有可能的摆放方式,但如何来枚举是一个问题。首先,可以将输入的轮廓转化为01序列,遇到边界符号就是1,空格就是0。这样只需要看枚举的重叠方式的效果和输入的效果是否完全相同即可。

那么正方形该如何枚举呢?通过观察我们发现,所有可能的摆放位置一共就9种情况,因此可以把每个正方形事先存储好。那么问题又来了,怎么完整的描述一个正方形呢?通过观察我们还可以发现,8个边界的下标和中间4个空格的下标即可完整的描述一个正方形。而且这样描述会让模拟重叠这个过程变得十分的方便。只要遇到这个正方形的边界下标,就设为1,只要遇到该正方形的空格,就设为0,同时累加边界的个数。当边界相同时,再检查模拟后的结果和输入的是否完全一致即可。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值