Codechef BINOMSUM
题意:(复制sunset的)有$T$天,每天有$K$个小时,第$i$天有$D+i−1$道菜,第一个小时你选择$L$道菜吃,接下来每个小时你可以选择吃一道菜或者选择$A$个活动中的一个参加,不能连续两个小时吃菜,问每天的方案数之和。$K$,$A$预先给定,$Q$次询问,每次给$D$,$L$,$T$。 题解:显然$ans=\sum_{i=D}^{D+T-1}\binom{i}{L}F(i)$,其中$F(i)$是一个不超过$k-1$次的多项式。 把组合数暴力拆开,变为$\sum_{i=D}^{D+T-1}\frac{i!}{L!(i-L)!}F(i)$。因为有阶乘,所以考虑把$F(i)$写成上升幂多项式的形式来消掉阶乘。具体地,设$F(x)=\sum_{i=0}^{k-1}a_i(x+1)\dots(x+i)=\sum_{i=0}^{k-1}a_i\frac{(x+i)!}{x!}$,则$ans=\frac{1}{L!}\sum_{i=D}^{D+T-1}\sum_{j=0}^{k-1}a_j\frac{(i+j)!}{(i-L)!}$。考虑在$\frac{(i+j)!}{(i-L)!}$的分母处补上$(j+L)!$变为组合数,则$ans=\frac{1}{L!} \sum_{j=0}^{k-1}a_j(j+L)!\sum_{i=D}^{D+T-1}\binom{i+j}{j+L}$