瞎编的故事
故事の套路
在很久很久以前,有一个伟大的数学家叫欧几里得,有次他打算装修家里铺地砖,打算网购一批地砖。但是作为小工匠兼数学网红的他,网购之前那就要量好尺码,算好需求。
假设欧几里得家里的屋子是标准的直角四边形,长为X,宽为Y。那么买正方形Z*Z的方砖(其中Z=[1,min(X,Y)]),最少需要多少个方砖才能完美的铺满。
分析
1.标准的直角四边形 意味着可能是正方形或者长方形。需要分情况讨论。
2.求最少的个数。显然是有点贪心算法的思想。
算法是求一类问题的通解
题目的拆解
显然:
这个问题如果思考的角度不对还是很难搞,因为算法是求一类问题的通解 所以我们需要找到这个问题的根问题就是最根本最简单的模式是什么。
最简单的情况–降维打击
显然最少数目不是困难所在。而是Z值变化的然后求最值这是麻烦。我们把这个条件降维,把Z变成固定的值再求最小。
1.X==Y 那么 Z==X==Y那就是最小的
2.当X!=Y那么就是以个固定的Z能完美的铺满地板那就是最小啊。
a.找出这个地板Z的最大值。显然就是X和Y两面都咬合完全那就是最大公约数呗。那么我们就得到了最小的Z
b.然后我们就铺这个地板呗。找到共需要多少个地砖记为n
3.然后在上述基础上加入难度。
Z都是正方形变成。那么小的Z变成等价大的Z即可减少数量啊。那么的话是不是跟2048一样。小变大的以个逆向过程。
a.根据X Y限制条件得到最大的Z值,其实就是最大的正方形即Z=min(X,Y)值。看看最大能铺几个得n1,然后得到剩余的面积,即把原来的X,Y值更新啊。然后再求当前得最大Z得个数n2,再更新为剩余的面积,更新X,Y然后继续继续。直到最终等于最大的Z==Z最小值的。那么剩余面积全部是Z最小的个数即可。
总结:
X Y 值
1.求出铺满地面的地砖最小个数时候正方形地砖的最大Z值。即X,Y最大公约数。
2.求出每次的最大Z以及它的个数。再更新面积为剩余面积,更新X Y
3.重复2的步骤。累加每次的N
4.结束条件 最大的N=最小的N时候。那么得到最后的个数。累加个数
5.得到最少个数。
【延展】:
1.清晰的思维就是找出条件,切个问题,找出问题的难点在哪,降维打击把问题简化压缩找到最基础的模型(变化搞为不变化等) 找到最简问题然后你想加上这些难度壳子。
2.一步步分析条件 深入拆解。 破竹窥题,逆向求解