1866. 恰有 K 根木棍可以看到的排列数目

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];
    }
};

你可能感兴趣的:(1866. 恰有 K 根木棍可以看到的排列数目)