给定n个物品,可以用一个/两个/三个不同的物品凑出不同的价值,求每种价值有多少种拼凑方案(顺序不同算一种)
显然搞一波母函数然后直接上fft即可。 问题是怎么处理重复的。 设x为只选一个,y为选两个相同的,z为选三个相同的,那么答案就是x+(x*x-y)/2+(x*x*x-3*x*y+z*2)/6
解释一下,x就是只选一个,(x*x-y)/2表示选两个减去重复的再除以排列,(x*x*x-3*x*y+z*2)/6表示选三个然后减去两个相同的乘上其排列再加上两倍三个相同的。看不懂的话就自己画一个图看看吧。
新闻热点
疑难解答