ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

洛谷题单指南-组合数学与计数-P1287 盒子与球

2026/8/7 22:06:26 拓冰建站 浏览量
洛谷题单指南-组合数学与计数-P1287 盒子与球

原题链接:https://www.luogu.com.cn/problem/P1287

题意解读:n个不同的球放入r个不同盒子的方案数

解题思路:

1、第二类斯特林数

用于解决n个不同的球放入r个相同盒子的方案数,不同盒子乘上r!即可。

可以用递推实现斯特林数,

设s[i][j]表示i个不同球放入j个相同盒子的方案数,

考虑第i个球的方法:

放入一个新盒子:s[i][j] = s[i-1][j-1]

放入前n-1个球所放的j个盒子:s[i][j] = s[i-1][j] * j,乘上j是因为有j个盒子可选

根据加法原理:s[i][j] = s[i-1][j-1] + s[i-1][j] * j

初始状态:s[0][0] = 1

100分代码:

#include <bits/stdc++.h>
using namespace std;const int N = 15;int n, r, s[N][N];int main()
{cin >> n >> r;s[0][0] = 1;for(int i = 1; i <= n; i++)for(int j = 1; j <= r; j++)s[i][j] = s[i - 1][j - 1] + s[i - 1][j] * j;int ans = s[n][r];for(int i = 1; i <= r; i++) ans *= i;cout << ans << endl;return 0;
}