Algorithm 改良掉蛋拼图
假设我有m个鸡蛋,希望知道n层(n>=2)建筑中的哪些楼层可以安全地掉下鸡蛋,哪些楼层会导致鸡蛋在落地时破裂 有几个假设:Algorithm 改良掉蛋拼图,algorithm,dynamic-programming,Algorithm,Dynamic Programming,假设我有m个鸡蛋,希望知道n层(n>=2)建筑中的哪些楼层可以安全地掉下鸡蛋,哪些楼层会导致鸡蛋在落地时破裂 有几个假设: 一个鸡蛋在摔下来后仍然留在一楼,可以再次使用。我得到一楼去收集活蛋 破鸡蛋不能再用了 跌落对所有鸡蛋的影响是相同的 如果鸡蛋掉下来会碎,那么从较高的窗户掉下来就会碎 如果一只蛋能在一次坠落中存活下来,那么它能在一次较短的坠落中存活下来 鸡蛋从最高层掉下来会碎,从第一层掉下来不会碎 对我来说,上楼梯很难,下楼梯也很容易 如何使在更高楼层上旅行的距离最小化?我在Haskell上
如何使在更高楼层上旅行的距离最小化?我在Haskell上找到了一般旅行距离的解决方案,然后在Python上重新编写,并针对我的任务进行了修改
从数学导入inf
从集合导入namedtuple
从functools导入lru\U缓存
Solution=namedtuple('Solution',('moves','floors'))
@lru_缓存(最大大小=无)
def解算(保持、下降、高度、低、高):
如果hi==lo+1:
返回解决方案(0,[])
解决方案=列表()
如果删除:
移动,楼层=求解(保持+下降,0,1,低,高)
附加(解决方案(移动[1]+楼层))
如果举行:
对于范围内的_高度(lo+1,hi):
断开=解算(保持-1,下降,_高度,低,_高度)
生存=解决(保持-1,下降+1,_高度,_高度,高)
最差=最大值((断裂,幸存),关键点=λx:x.移动)
解决方案.append(
解决方案(
最大(_height-height,0)+最差移动,
[u高度]+最差楼层
)
)
return min(解决方案,key=lambda x:x.moves,默认值=Solution(inf,[]))
打印(求解(3,0,1,1100))
最小化什么?最坏的情况,一般情况,其他情况?在最坏的情况下尽量缩短距离。你似乎可以通过以下方式来参数化问题:未破碎的鸡蛋数量,你持有的鸡蛋数量,你当前所在的楼层,你知道的最高楼层是安全的,而你知道的最低楼层是不安全的。然后使用DP,因为没有必要使用DP。这是纯数学。@user58697我想看看这个问题的纯数学解决方案。你在什么地方有书面记录吗?