[LuoguP1025][数据加强]数的划分
原题连接: Click 加强数据: Click Solution 参考博客: Click 题目意思非常明确了,这是一道组合数学的题目。我就直接讲dp解法了。 dp 题意可以转化为将 n n n 个苹果放进 k k k 个盒子里,并且不允许空盒。 设 f [ i ] [ j ] f[i][j] f [ i ] [ j ] 代表将 i i i 个苹果放入 j j j 个盒子中,那么我们用解决这类问题的常用方法来分析: 我们必须先保证每个盒子非空,因此在 i i i 个苹果中选出 j j j 个放入每个盒子。 此时我们剩余 i − j i-j i − j 个苹果,我们就是要往已有的一层苹果上加 i − j i-j i − j 苹果,求此时的方案数。 现在 i − j i-j i − j 个苹果可以任意分配了,也就是分成 1 1 1 份、 2 2 2 份、 3 3 3 份都是合法的…… 得到转移方程: d p [ i ] [ j ] = ∑ k = 1 j d p [ i − j ] [ k ] dp[i][j] = \sum_{k=1}^jdp[i-j][k] d p [ i ] [ j ] = k = 1 ∑ j d p [ i − j ] [ k ] 枚举 i i i ,随后枚举 j j j ,随后枚举 k k k ,三层循环即可得出答案。 时间复杂度为 O ( n k 2 )