考虑设 fi,jf_{i,j} 表示现在有 ii 个元素和为 jj 的方案数,考虑怎么转移。

我们可以在原来的序列前面添加一些 00 或者将所有的元素全部加 11,显然这样可以做到将所有的情况全部考虑。

所以对于 mm\to \infty 的情况,就直接:

fi,j=fi1,j+fi,jif_{i,j}=f_{i-1,j}+f_{i,j-i}

对于有 mm 的限制的情况,其实就是限制了不能使劲添加 00,那么就设一个 gi,jg_{i,j} 表示序列里不含有 00 的贡献,那么就有:

fi,j=fi,ji+k=1min(m,i)gik,j,gi,j=fi,jif_{i,j}=f_{i,j-i}+\sum\limits_{k=1}^{\min(m,i)}g_{i-k,j},g_{i,j}=f_{i,j-i}

使用前缀和优化,之间复杂度为 O(n2)O(n^2)