ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

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

洛谷题单指南-组合数学与计数-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;
}

 

返回列表