【CF932E】Team Work(第二类斯特林数)

题面

洛谷

CF

求\(\sum_{i=1}^nC_{n}^i*i^k\)

题解

寒假的时候被带飞,这题被带着写了一遍。事实上并不难,我们来颓柿子。

首先回忆一下第二类斯特林数关于整数幂的计算公式:

\[m^n=\sum_{i=0}^mC_{m}^i*S(n,i)*i!
\]

\(m^n\)理解为把\(n\)个不同的球放到\(m\)个不同的盒子中去。那么我们枚举有几个盒子非空,用第二类斯特林数乘阶乘计算放置的方案数,最后求和就是结果。

那么直接把\(i^k\)展开

\[\sum_{i=1}^nC_n^i\sum_{j=0}^iC_i^j*S(k,j)*j!
\]

把组合数直接拆开

\[\sum_{i=1}^n\frac{n!}{i!(n-i)!}\sum_{j=0}^i\frac{i!}{j!(i-j)!}*S(k,j)*j!
\]

化简之后的结果就很好看了。

\[\sum_{i=1}^n\frac{n!}{(n-i)!}\sum_{j=0}^i\frac{S(k,j)}{(i-j)!}
\]

\(n\)的范围太大,而\(k\)的范围很小,所以考虑把斯特林数提出来放到外层循环

\[\sum_{j=0}^nS(k,j)\sum_{i=j}^n\frac{n!}{(n-i)!}*\frac{1}{(i-j)!}
\]

因为第二类斯特林数\(S(k,j)\)如果\(j>k\)那么结果就是\(0\),所以可以不需要考虑。那么式子可以化简$$\sum_{j=0}{min(n,k)}S(k,j)\sum_{i=j}n\frac{n!}{(n-i)!}*\frac{1}{(i-j)!}$$

后面的阶乘孤零零的,给他配点东西就好看了。

\[\sum_{j=0}^{k}S(k,j)\sum_{i=0}^n\frac{n!}{(n-j)!}\frac{(n-j)!}{(n-i)!(i-j)!}
\]

\[\sum_{j=0}^{k}S(k,j)\frac{n!}{(n-j)!}\sum_{i=0}^nC_{n-j}^{i-j}
\]

\[\sum_{j=0}^{k}S(k,j)\frac{n!}{(n-j)!}2^{n-j}
\]

因为\(k\)只有\(5000\),所以\(i\)的起始位置最多只有\(5000\)个,那么直接\(O(k)\)考虑计算即可。

斯特林数暴力\(O(k^2)\)预处理,总的复杂度\(O(k^2)\)。

#include<iostream>
#include<cstdio>
using namespace std;
#define MOD 1000000007
#define inv2 500000004
#define MAX 5050
int fpow(int a,int b){int s=1;while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}return s;}
int n,k,S[MAX][MAX],ans;
int main()
{
scanf("%d%d",&n,&k);S[0][0]=1;
for(int i=1;i<=k;++i)
for(int j=1;j<=k;++j)
S[i][j]=(S[i-1][j-1]+1ll*S[i-1][j]*j)%MOD;
for(int j=0,pw=fpow(2,n),nw=1;j<=min(n,k);pw=1ll*pw*inv2%MOD,nw=1ll*nw*(n-j)%MOD,++j)
ans=(ans+1ll*S[k][j]*nw%MOD*pw%MOD)%MOD;
printf("%d\n",ans);
return 0;
}

【CF932E】Team Work(第二类斯特林数)的更多相关文章

  1. CF932E Team Work(第二类斯特林数)

    题目 CF932E Team Work 前置:斯特林数\(\Longrightarrow\)点这里 做法 \[\begin{aligned}\\ &\sum\limits_{i=1}^n C_ ...

  2. CF932E Team Work——第二类斯特林数

    题解 n太大,而k比较小,可以O(k^2)做 想方设法争取把有关n的循环变成O(1)的式子 考虑用公式: 来替换i^k 原始的组合数C(n,i)一项,考虑能否和后面的系数分离开来,直接变成2^n处理. ...

  3. Codeforces 932 E Team Work ( 第二类斯特林数、下降阶乘幂、组合数学 )

    题目链接 题意 : 其实就是要求 分析 : 先暴力将次方通过第二类斯特林数转化成下降幂 ( 套路?) 然后再一步步化简.使得最外层和 N 有关的 ∑ 划掉 这里有个技巧就是 将组合数的表达式放到一边. ...

  4. CF932E Team Work(第二类斯特林数)

    传送门:CF原网 洛谷 题意:给定 $n,k$,求 $\sum\limits^n_{i=1}\dbinom{n}{i}i^k\bmod(10^9+7)$. $1\le n\le 10^9,1\le k ...

  5. 【cf932E】E. Team Work(第二类斯特林数)

    传送门 题意: 求\(\displaystyle \sum_{i=0}^n{n\choose i}i^k,n\leq 10^9,k\leq 5000\). 思路: 将\(i^k\)用第二类斯特林数展开 ...

  6. Gym - 101147G G - The Galactic Olympics —— 组合数学 - 第二类斯特林数

    题目链接:http://codeforces.com/gym/101147/problem/G G. The Galactic Olympics time limit per test 2.0 s m ...

  7. 【BZOJ5093】图的价值(第二类斯特林数,组合数学,NTT)

    [BZOJ5093]图的价值(第二类斯特林数,组合数学,NTT) 题面 BZOJ 题解 单独考虑每一个点的贡献: 因为不知道它连了几条边,所以枚举一下 \[\sum_{i=0}^{n-1}C_{n-1 ...

  8. 【BZOJ4555】求和(第二类斯特林数,组合数学,NTT)

    [BZOJ4555]求和(第二类斯特林数,组合数学,NTT) 题面 BZOJ 题解 推推柿子 \[\sum_{i=0}^n\sum_{j=0}^iS(i,j)·j!·2^j\] \[=\sum_{i= ...

  9. HDU - 4625 JZPTREE(第二类斯特林数+树DP)

    https://vjudge.net/problem/HDU-4625 题意 给出一颗树,边权为1,对于每个结点u,求sigma(dist(u,v)^k). 分析 贴个官方题解 n^k并不好转移,于是 ...

随机推荐

  1. MFC 不同窗体之间变量调用

    应用场景: (1)主对话框包含一个Tab控件,Tab控件用来切换显示若干子对话框,子对话框类的成员需要互相访问. (2)或者程序中包含多个类,各类之间需要互相访问. 方法1-定义指针成员变量: 详情参 ...

  2. linux下报错bash: service: command not found

    在linux下操作的时候经常会遇到,bash: service: command not found这个错误,以前在网上找了,照着弄了,也没细看原因,今天又碰到这个问题,就顺便研究一下. 1.通常这种 ...

  3. Flask中的模板语言jinja2

    jinja2介绍 jinja2是Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持,由于其灵活,快速和安全等优点被广泛使用. jinja2的优点 jin ...

  4. vsftpd安装配置以及常见问题解决

    vsftpd安装配置以及踩坑解决办法,Centos7 nginx已经配置成功了,但是使用http始终没办法访问到图片,那么你来对地方了(在文章末尾是原因) 配置nginx教程:http://blog. ...

  5. react-router V4中的url参数

    概述 之前写过react在router中传递数据的2种方法,但是有些细节没有理清楚,现在补上,记录下来,供以后开发时参考,相信对其他人也有用. 参考资料:stackoverflow react rou ...

  6. C# 对密码等数据进行对称性加密解密

    类: /// <summary> /// DESEncrypt加密解密算法. /// </summary> public class DESEncrypt { private ...

  7. Thread,ThreadPool,Task, 到async await 的基本使用方法和理解

    很久以前的一个面试场景: 面试官:说说你对JavaScript闭包的理解吧? 我:嗯,平时都是前端工程师在写JS,我们一般只管写后端代码. 面试官:你是后端程序员啊,好吧,那问问你多线程编程的问题吧. ...

  8. Filebeat的Registry文件解读

    你可能没有注意但很重要的filebeat小知识 Registry文件 Filebeat会将自己处理日志文件的进度信息写入到registry文件中,以保证filebeat在重启之后能够接着处理未处理过的 ...

  9. google 身份验证器

    谷歌身份验证器原理 就是服务器与客户端算法相同

  10. Docker---Run命令

    docker运行在一个独立的隔离的进程中. 当用户执行dockerrun,它将启动一个有着独立的文件系统,独立的网络和独立的进程树的进程. 基本的docker run命令的格式: docker run ...