写了两个小时终于做出来了,呜呜呜呜,是我太菜
题目描述
如果一些边长互不相同的正方形,可以恰好拼出一个更大的正方形,则称其为完美正方形。
历史上,人们花了很久才找到了若干完美正方形。比如:如下边长的 22 个正方形 2 3 4 6 7 8 12 13 14 15 16 17 18 21 22 23 24 26 27 28 50 60。
如下图那样组合,就是一种解法。
此时,紧贴上边沿的是:60 50,紧贴下边沿的是:26\ 28\ 17\ 21\ 1826 28 17 21 18。
22 阶完美正方形一共有 88 种。下面的组合是另一种:2 5 9 11 16 17 19 21 22 24 26 30 31 33 35 36 41 46 47 50 52 61。
如果告诉你该方案紧贴着上边沿的是从左到右依次为:47 46 61,你能计算出紧贴着下边沿的是哪几个正方形吗?
思路
刚拿到题就很懵啊,虽然知道肯定是DFS,可是竟然有点无从下手。后来在看到一些大佬的思路后,我确定了一种我能理解并容易实现的思路。
我们都玩过俄罗斯方块(没玩过当我没说),我们在选择一块方块的位置时都是选择尽量往底处放置
那么我们可以创建一个154X154的二维数组,通过0和1确定当前位置是否已被占用,然后每次从最底处开始下一层的搜索。放置方块前要判断当前位置是否放得下,最后确定一个递归出口,当所有方块用完时结束,如果结束时二维数组中的元素全是1,那么就是正确答案了
代码(写的比较乱,我还不是特别熟练)
import os
import sys
# 请在此输入您的代码
map=[[0 for i in range(154)]for j in range(154)]
for i in range(47):
for j in range(47):
map[i][j]=1
for i in range(46):
for j in range(47,93):