You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Lego Blocks动态规划中无垂直断裂墙计数逻辑的疑问

乐高积木动态规划问题核心逻辑解析

问题背景

现有4种规格的乐高积木:111、112、113、114,每种数量无限。需构建高度为H、宽度为M的无孔洞实心墙,实心墙指无法沿任意竖直线拆分而不切割积木,积木仅水平放置。求构建方式总数?

关键变量定义

先明确两个核心变量的含义,这是理解逻辑的基础:

  • A(H,W):高度为H、宽度为W的所有墙体的总数量(包含可垂直拆分和不可拆分的所有情况)
  • S(H,W):高度为H、宽度为W的实心墙数量(完全不可沿任意竖直线拆分的墙体)

对“最左侧断裂点”计数逻辑的解释

原描述中“Branch on the leftmost place where the wall is not connected”的本质是:按可拆分墙体的最左侧垂直断裂点,对所有可拆分墙体做无重复的分类计数。

对于任意一个可拆分的W宽度墙体,必然存在一个唯一的最小X(1≤X<W)——在这个X位置,墙体有一条完整的垂直裂缝,且X左侧的部分是完全不可拆分的实心墙(如果左侧还能拆分,那X就不是最左侧的断裂点了)。

基于这个分类规则,所有可拆分墙体的总数,就是所有可能X对应的「左侧实心墙数量 × 右侧任意墙体数量」的总和,即 Sum(S(H,X) * A(H,W-X))(X从1到W-1)。

公式推导逻辑

所有墙体总数A(H,W)可以被严格划分为两类:

  1. 本身就是不可拆分的实心墙:数量为S(H,W)
  2. 可拆分的墙体:数量为Sum(S(H,X) * A(H,W-X))(X=1到W-1)

因此可以得到等式:

A(H,W) = S(H,W) + Σ(S(H,X) * A(H,W-X)) ,其中X∈[1, W-1]

将等式变形,就得到实心墙数量的计算公式:

S(H,W) = A(H,W) - Σ(S(H,X) * A(H,W-X)) ,其中X∈[1, W-1]

对您误解的澄清

您之前误以为总墙数是“所有W*H墙数与所有{W-X}*墙数的乘积之和加实心墙数”,这会导致重复计数——如果左侧用A(H,X)而非S(H,X),同一个墙体可能会在多个X值下被重复统计(比如一个在X=2和X=3都有断裂的墙体,会被X=2和X=3分别算一次)。而用S(H,X)作为左侧的数量,保证了X是该墙体的第一个断裂点,每个可拆分墙体只会被统计一次,完全避免了重复。

内容的提问来源于stack exchange,提问作者Blackwidow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 13:24:25