简单DP
。
首先考虑一个暴力的dp
。
表示考虑了前种商品,第种商品买了个,前种商品一共花了元的方案数。
我们可以考虑约束一下。
首先,必须得是的倍数,因为后面的商品价格都是级别了。
其次,必须大于等于,因为前种商品,每一个都至少买了个。
你可以写一个代码严格算一下,在的时候,严格运算次数是。
具体的话,你可以图省事,用一个unordered_map
来存有用的状态,无脑向前转移。
正解1
正解的话,考虑这样一个题意的转化:
你需要盖这么一共栋楼,第栋楼,每盖一层需要花元,现在从左到右,每栋楼都得比它右边的楼高,问:有多少种方案。
这就是典型的BELL数了,表示个符合条件的数字和为的方案数,转移就两种:以及两种。
正解2
考虑另一种题意转化:第一个物品块,第二个物品块,第三个物品块,...,这样就没有所谓的数量限制了。
直接完全背包即可。