ABC221H Count Multiset
构造序列型 DP。经典的就是这么一种构造序列的方式:
用两种操作。
-
增加一个 \(0\)。
-
将当前序列中所有数加 \(1\)。
由此可以构造出任意一种自然数不降序列。
回到本题。即要求构造一个长度 \(k\) 和为 \(n\) 且没有一种数出现超过 \(m\) 次的不降序列,求方案数。考虑用上面提到的方法构造。
令 \(dp[i][j]\) 表示当前序列中有 \(i\) 个数,和为 \(j\) 的方案数。
但我们还要限制 \(0\) 的出现次数,用额外数组 \(f[i][j]\) 表示有 \(i\) 个数,和为 \(j\) 且不含有 \(0\) 的方案数。
\[dp[i][j]=dp[i][j-i]+\sum_{x=1}^mf[i-x][j]
\]
\[f[i][j]=dp[i][j-i]
\]