优雅的解法。
题解 #
首先我们可以忽略第一层方块。设dps,b表示把b个方块放在s堆上放法的数量。(有些堆可以是空的)
现在我们考虑一下转移方程,有三种情况:
第一种情况我们可以忽略掉第一层,放置的方法就是dps,b−s. 第二,三种情况我们可以忽略掉空的那一堆,所以有2⋅dps−1,b种放法,但两种情况有重叠,因为有可能左右两堆都是空的,所以要减掉dps−2,b。综上所述,转移方程就是:
dps,b=dps,b−s+2⋅dps−1,b−dps−2,b
这个可以用记忆化搜索来求。
Code #