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] dp[i][j]=k=1∑j