meet-in-the-middle
一个优化暴力的知名小 trick,早就知道,记一下。
没啥好的题,手搓一道吧:
给定一个 矩阵,第 行第 列元素为 ,求是否存在一条左上到右下的路径(只能向右走或向下走),使得元素和是 的倍数?
,。
总共需要走 步,路径总数不超过 。或者更确切地,为 ,我们无法枚举(因为复杂度还会乘 )。
我们想到,如果能只走 步的话就好了。
于是我们发现确实可以做到。副对角线是矩阵的一个天然分界线,从左上角走到副对角线的路径总数为 种,从右下角也一样。我们处理出左上路径 种可能的元素和并插到 set 中,然后枚举右下路径的可能情况,找找 set 中是否存在 即可。
于是时间复杂度被我们从 优化到了 。
这就是 meet-in-the-middle 的 trick,这类题目的显著特征是数据范围在 之间(例如本题中的数据范围实际是 ),此时 的暴力无法通过,希望将复杂度开平方。此时我们将问题分为两个规模为 的小问题,并且试图在能接受的复杂度内合并两个小问题的答案。
双向 bfs 其实也是利用了这个 trick。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现