组合计数
Posted chaos.zju的园子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组合计数相关的知识,希望对你有一定的参考价值。
第一类Stirling数
第一类斯特林数
参考题解
Stirling数模板题
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 1e3+5, MOD = 1e9+7;
typedef long long LL;
int n, k;
int dp[N][N]; //dp[i][j]: 从i个物中选出j个圆排列的方案数
int main()
{
cin >> n >> k;
dp[0][0] = 1;
for(int i = 1; i <= n; ++ i)
for(int j = 1; j <= k; ++ j) //dp[i][>i] = 0;
{
dp[i][j] = (dp[i-1][j-1] + (i-1)*(LL)dp[i-1][j]%MOD)%MOD;
}
cout << dp[n][k] << endl;
return 0;
}
恰有 K 根木棍可以看到的排列数目
参考题解
dp[i][j],第一类斯特林数:从i个数中分出j个圆排列的方案数
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 5e3+5, INF = 0x3f3f3f3f, MOD = 1e9+7;
typedef long long LL;
int dp[N][N]; //dp[i][j],第一类斯特林数:从i个数中分出j个圆排列的方案数
class Solution {
public:
int rearrangeSticks(int n, int k) {
dp[0][0] = 1;
for(int i = 1; i <= n; ++ i)
for(int j = 1; j <= k; ++ j)
{
dp[i][j] = (dp[i-1][j-1] + (i-1)*(LL)dp[i-1][j]%MOD)%MOD;
}
return dp[n][k];
}
};
以上是关于组合计数的主要内容,如果未能解决你的问题,请参考以下文章