第二类Stirling数初探 By cellur925
上午noi.ac崩崩崩了,栽在组合数学上,虽说最后在辰哥&Chemist的指导下A掉了此题,也发现自己组合数学太弱了qwq。
在luogu上找题,结果找到了一个第二类斯特林数的题(还是双倍经验,逃。)
一、什么是第二类Stirling数
第二类斯特林数 S(n,k):把 n 个元素划分成 k 个集合的方案数。
这个问题说的实际一点,就比如说,有n个互异的小球,把他们放入m个盒子里,盒子里不允许为空的方案数。我们设s(i,j)表示放到i个小球,j个盒子的方案数。
那么对于每个小球,当前我们有两种放法:
第一种,我们把它放进一个现在盒子里没球的盒子中,这部分是s(i-1,j-1)
第二种,我们把它放进一个现在盒子里有球的盒子中,因为有j个盒子,所以这部分是 j * s (i-1,j)
那么将二者 加起来就是我们要求的解。
即
二、丢几道例题跑
LuoguP3904三只小猪 比较裸啦=w=。
#include<cstdio>
#include<algorithm> using namespace std;
typedef long long ll; ll n,m;
int len;
int ans[];
int s[][][]; ll lmin(ll a,ll b)
{
if(a<b) return a;
else return b;
} void bigcalc(int x,int y)
{
if(y>x) return ;
if(x==&&y==) return ;
int tmp=;
for(int i=;i<=len;i++) ans[i]=;
len=;
for(int i=;i<=s[x-][y][];i++)
{
ans[i]=s[x-][y][i]*y+tmp;
tmp=ans[i]/;
ans[i]%=;
}
len=s[x-][y][];
if(tmp) ans[++len]=tmp;
s[x][y][]=;
tmp=;
while(s[x][y][]<=s[x-][y-][]||s[x][y][]<=len)
{
s[x][y][s[x][y][]]=s[x-][y-][s[x][y][]]+ans[s[x][y][]]+tmp;
tmp=s[x][y][s[x][y][]]/;
s[x][y][s[x][y][]]%=;
s[x][y][]++;
}
s[x][y][s[x][y][]]=tmp;
if(s[x][y][s[x][y][]]==&&s[x][y][]!=) s[x][y][]--;
} int main()
{
scanf("%lld%lld",&n,&m);
if(n<m) {printf("");return ;}
if(n==m) {printf("");return ;}
s[][][]=;s[][][]=;
for(int i=;i<=n;i++)
for(int j=;j<=lmin(i,m);j++)
bigcalc(i,j);
for(int i=s[n][m][];i>=;i--)
printf("%d",s[n][m][i]);
return ;
}
LuoguP1655小朋友的球 上面题的二倍经验
三、一些变体
(来自baidubaike==)
第二类Stirling数初探 By cellur925的更多相关文章
- lightOJ 1326 Race(第二类Stirling数)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1326 题意:有n匹马赛跑.问有多少种不同的排名结果.可以有多匹马的排名相同. 思路:排 ...
- [总结] 第二类Stirling数
上一道例题 我们来介绍第二类Stirling数 定义 第二类Stirling数实际上是集合的一个拆分,表示将n个不同的元素拆分成m个集合的方案数,记为 或者 .和第一类Stirling数不同的是,集合 ...
- 第二类Stirling数
第二类斯特林数 第二类Stirling数:S2(p, k) 1.组合意义:第二类Stirling数计数的是把p个互异元素划分为k个非空集合的方法数 2.递推公式: S2(0, 0) = 1 S2(p, ...
- [BZOJ5093]图的价值(NTT+第二类Stirling数)
5093: [Lydsy1711月赛]图的价值 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 250 Solved: 130[Submit][Sta ...
- LightOJ 1326 – Race 第二类Stirling数/
简单的模板题. 题意:问n匹马出现的不同排名数. 题解:可以使用DP,本质上还是第二类Stirling数(隔板法) #include <stdio.h> #include <iost ...
- HDU 2643 Rank:第二类Stirling数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2643 题意: 有n个个选手参赛,问排名有多少种情况(可以并列). 题解: 简化问题: 将n个不同的元素 ...
- 自然数幂和——第一类Stirling数和第二类Stirling数
第一类Stirling数 首先设 $$S_k(n)=\sum_{i=0}^ni^k$$ 根据第一类斯特林数的定义(P是排列数,C是组合数,s是Stirling) $$C_n^k={P_n^k\over ...
- (转) [组合数学] 第一类,第二类Stirling数,Bell数
一.第二类Stirling数 定理:第二类Stirling数S(p,k)计数的是把p元素集合划分到k个不可区分的盒子里且没有空盒子的划分个数. 证明:元素在哪些盒子并不重要,唯一重要的是各个盒子里装的 ...
- 第一类和第二类Stirling数
做了老是忘…… 实际问题: 找维基百科.百度百科…… 第一类Stirling数 n个元素构成m个圆排列 S(n,m)=S(n-1,m-1)+(n-1)*S(n-1,m) 初始 S(0,0)=1 S(n ...
随机推荐
- python实现的websocket总结 —— wspy
之前曾有php版的websocket封装包.见Websocket--php实战,近期使用python做一些功能,须要用到对websocket的操作,因此,參照之前的实现,实现了这个python版本号. ...
- c程序设计语言第一章3
字符数组是C语言中最常用的数组类型.下面我们通过编写一个程序,来说明字符数组以反操作字符数组的函数的用法.该程序读入一组文本行,并把最长的文水行打印出来.该算法的基本框架非常简单: while (还有 ...
- HDU 3305 Ice-sugar Gourd
Ice-sugar Gourd Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- IMP-00009 And IMP-00028
导出文件异常结束” 错误,google一下,发现可能有如下原因导致 1.imp的数据太大,没有写buffer和commit 2.两个数据库字符集不同 3.从低版本exp的dmp文件,向高版本imp 4 ...
- 基于Python 的简单推荐系统
def loadExData(): return[[1,1,1,0,0], [2,2,2,0,0], [1,1,1,0,0], [5,5,5,0,0], [1,1,0,2,2], [0,0,0,3,3 ...
- sql server中like无法匹配下划线问题解决方案
在sql server的like中下划线类似于通配符%,所以无法使用like '%_%'来匹配下划线,可以通过以下两种办法实现匹配下划线 1.使用转义字符escape like '%\_%' esca ...
- 构造方法,重载,static,math类(java基础知识七)
1.构造方法概述和格式 * A:构造方法概述和作用 * 给对象的数据(属性)进行初始化 * B:构造方法格式特点 * a:方法名与类名相同(大小也要与类名一致) * b:没有返 ...
- codeforces 447C. DZY Loves Sequences 解题报告(446A)
题目链接:http://codeforces.com/problemset/problem/447/C 题目意思:给出 一个 包含 n 个数的序列你,从中需要找出这个序列的最长子串,满足在里面只修改其 ...
- A+B Problem && OJ推荐【持续更新】
目录 List 前言 长郡 Position: code 1. 2. 持续更新,么么哒 List 前言 有没有觉得写这篇文章很奇怪,这个还是有原因的.①很多OJ都有着道题,所以发个博客②这可以介绍很多 ...
- hdu 5615 Jam's math problem(十字相乘判定)
d. Jam有道数学题想向你请教一下,他刚刚学会因式分解比如说,x^2+6x+5=(x+1)(x+5) 就好像形如 ax^2+bx+c => pqx^2+(qk+mp)x+km=(px+k)(q ...