1866. 恰有 K 根木棍可以看到的排列数目
第一类斯特林数
思路见题解
很像组合数公式的推导过程
C[n,m] = C[n-1,m-1] + C[n-1,m]
选第n个数,剩下的是,从n-1个里选m-1个:C[n-1,m-1]
不选第n个数,剩下的是,从n-1个里选m个:C[n-1,m]
class Solution {
public:
int rearrangeSticks(int n, int k) {
const int MOD = 1e9 + 7;
int dp[n + 1][k + 1];
memset(dp, 0, sizeof dp);
dp[0][0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++) {
long long tmp = 1ll * (i - 1) * dp[i - 1][j] % MOD;
dp[i][j] = (dp[i - 1][j - 1] + tmp) % MOD;
}
}
return dp[n][k];
}
};