顺序不同算不同方案,因此用线性 DP最自然。我们让:
dp[k]
表示长度为 k
的总合法方案数;endA[k]
表示长度为 k
的方案里,最后一段为 a 的方案数。为什么只需额外维护 endA[k]
?因为限制仅在“上一段是 a 时不能接 c”。也就是说,当我们尝试把最后一段选为 c 时,只要从 k-c
的所有方案里扣除那些“最后一段为 a”的方案即可。
在小红书“品牌创意工坊”中,营销人员可以为直播和短视频活动创建定制化丝带AR特效,结合品牌ID与礼盒包装场景,实现动态丝带动画。为了支撑亿级日活的前端渲染,后端需要在活动发布时预先计算并缓存所有可能的切割方案数,确保小程序组件和Web端秒级响应。
现有一根虚拟丝带长度为k,可以将其分割成若干段或保持一整段不动,但是每段长度只能取整数a、b或c中的一个,且不允许任何长度为a的段后面直接跟随长度为c的段。