球盒问题有8类,分别如下图

简单来说,就这样👇

将相同的球放入相同的盒子,其实相当于将正整数i分为j个正整数的个数
- cin>>n>>m;
- if(n
- cout<<0<
- return 0;
- }
- for(ll i=2;i<=n;i++) f[i][1]=1;
- for(ll j=2;j<=m;j++)
- for(ll i=j;i<=n;i++)
- f[i][j]=f[i-1][j-1]+f[i-j][j];
- cout<
相同的球放入不同的盒子
其实,我们直接排列组合一下
以每个盒子至少一个球举例。我们将这些球排成一排,用一些板把它们分开。如下图

若每个盒子可为空,则我们可以在每个盒子里提前放一个球,其它同上。
- cin>>n>>m;
- if(n
- cout<<0<
- return 0;
- }
- ll ans=1;
- for(ll i=1;i<=m-1;i++){
- ans*=n-i;
- ans/=i;
- }
- cout<
不同的球放入相同的盒子(第二类stirling数)
f[i][j]表示将前i个球放入相同的盒子,不允许空的情况,具体状态转移方程请看下图

第一种情况,左边:选完后变成m-1个装n-1个球,f[n-1][m-1]
第二种情况,右边:先让前n-1个球放m盒子,第n个球挑一盒

- cin>>n>>m;
- if(n
-
-
相关阅读:
EMC学习笔记(三)滤波
Android系统的启动流程
操作系统学习笔记11 | 生磁盘的使用与管理
Java解析生成二维码
【FPGA教程案例62】硬件开发板调试2——使用ila核在线调试,ila数据保存,读取,matlab辅助分析
【机器学习】核函数
GIS工具maptalks开发手册(三)01——绘制工具
Django视图层解析
在线生成接口文档
Java项目:SSM简单院校教师工资管理系统
-
原文地址:https://blog.csdn.net/zhang040818/article/details/134021527