1 条题解
-
0
题解
思路
从支撑链看结构
每块紫色积木都对应一条从高度 走到地面的支撑链。相邻两层中,链的横坐标至多变化 。两条链一旦合并,继续向下共用同一批积木不会变差。
设 表示支撑第 至第 块紫色积木所需的最少额外积木数。单独一条链需要 块,因此 。
区间转移
考虑把区间 最后分成 与 。两侧最外端的支撑链每下降一层至多相向移动 个横坐标单位。令
$$c(l,r)=\max\left(0,h+1-\left\lceil\frac{x_r-x_l}{2}\right\rceil\right).$$两部分最多可以在最底部共享 块积木,于是
$$f(l,r)=\min_{l\le m<r}\bigl(f(l,m)+f(m+1,r)-c(l,r)\bigr).$$反过来,在任意最优结构中,选择相邻支撑链首次分开的最低位置,也会得到上述某个分割;端点距离限制说明共享高度不可能超过 ,所以转移既可达又是下界。
若同层出现横坐标相差 的两块积木,可把其中一块向外平移一格而不增加数量,因此允许链暂时重叠的递推不会破坏“不相交”的要求。
做法
按区间长度从小到大枚举 ,预先由端点横坐标计算可共享高度,再枚举分割点 完成转移。
子任务
- 时所有紫色积木已经接触地面,答案为 。
- 时只需贪心扫描;横坐标相差 的相邻紫色积木可共用一块支撑积木。
- 满分算法按区间长度计算上述动态规划。
复杂度
时间复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1352
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者