思路

第二类斯特林数和组合数推式子的题目

题目要求\(\sum_{i=1}^n \left(\begin{matrix}n \\ i \end{matrix} \right) i^k\)

一个性质

第二类斯特林数有这样的性质

\[n^k=\sum_{i=0}^n \left\{\begin{matrix}k \\ i \end{matrix} \right\}i!\left(\begin{matrix}n \\ i \end{matrix} \right)
\]

就是相当于枚举取哪i个可区分的盒子,再把k个球放进去,方案数总和就等于每个球都任意放的方案数

推式子

因为\(i=0\)时,后面的贡献是0,所以不妨变为\(\sum_{i=0}^n \left(\begin{matrix}n \\ i \end{matrix} \right) i^k\)

然后代入性质,得到

\[\begin{align}&\sum_{i=0}^n \left( \begin{matrix}n\\i\end{matrix}\right)i^k \\ =&\sum_{i=0}^n \left( \begin{matrix}n\\i\end{matrix}\right)\sum_{j=0}^i \left\{ \begin{matrix}k\\j\end{matrix}\right\}j!\left( \begin{matrix}i\\j\end{matrix}\right) \\=&\sum_{i=0}^n \left( \begin{matrix}n\\i\end{matrix}\right)\sum_{j=0}^i \left\{ \begin{matrix}k\\j\end{matrix}\right\}\frac{i!}{(n-j)!}\\=&n!\sum_{i=0}^n \frac{1}{(n-i)!}\sum_{j=0}^i \left\{ \begin{matrix}k\\j\end{matrix}\right\}\frac{1}{(n-j)!}\\=&n!\sum_{i=0}^n \sum_{j=0}^i \left\{ \begin{matrix}k\\j\end{matrix}\right\}\frac{1}{(n-i)!(n-j)!}\\=&n!\sum_{j=0}^n\left\{ \begin{matrix}k\\j\end{matrix}\right\} \sum_{i=j}^n\left( \begin{matrix}n-i\\n-j\end{matrix}\right) \frac{1}{(n-j)!} \\=&n!\sum_{i=0}^n \sum_{j=0}^i \left\{ \begin{matrix}k\\j\end{matrix}\right\}\frac{1}{(n-i)!(n-j)!}\\=&\sum_{j=0}^n\frac{n!}{(n-j)!}\left\{ \begin{matrix}k\\j\end{matrix}\right\} \sum_{i=j}^n\left( \begin{matrix}n-i\\n-j\end{matrix}\right)\\=&\sum_{j=0}^n\frac{n!}{(n-j)!}\left\{ \begin{matrix}k\\j\end{matrix}\right\} \sum_{i=0}^n\left( \begin{matrix}n-i\\n-j\end{matrix}\right) \\=&\sum_{j=0}^n\frac{n!}{(n-j)!}\left\{ \begin{matrix}k\\j\end{matrix}\right\}2^{n-j}\\=&\sum_{j=0}^k\frac{n!}{(n-j)!}\left\{ \begin{matrix}k\\j\end{matrix}\right\}2^{n-j}\end{align}
\]

然后\(O(k^2)\)的处理就好了

代码

不知道为什么n,k不能声明到S函数的上方

#include <cstdio>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;
const int MOD = 1000000007;
int s[5010][5010]={0};
bool vis[5010][5010]={0};
int my_pow(int a,int b){
int ans=1;
while(b){
if(b&1)
ans=(1LL*ans*a)%MOD;
a=(1LL*a*a)%MOD;
b>>=1;
}
return ans;
}
int S(int n,int k){
// printf("n=%lld k=%lld\n",n,k);
if(vis[n][k])
return s[n][k];
vis[n][k]=true;
if(n==0&&k==0)
return s[n][k]=1;
else if(n==0||k==0)
return s[n][k]=0;
return s[n][k]=(S(n-1,k-1)%MOD+k*S(n-1,k)%MOD)%MOD;
}
int n,k;
signed main(){
scanf("%lld %lld",&n,&k);
// printf("%lld %lld\n",n,k);
int ans=0;
int mid=1;
for(int i=0;i<=min(k,n);i++){
ans=(ans+mid*S(k,i)%MOD*my_pow(2,n-i)%MOD)%MOD;
mid=(mid*(n-i))%MOD;
}
printf("%lld\n",ans);
return 0;
}

CF932E Team Work的更多相关文章

  1. [CF932E]Team Work & [BZOJ5093]图的价值

    CF题面 题意:求\(\sum_{i=0}^{n}\binom{n}{i}i^k\) \(n\le10^9,k\le5000\) 模\(10^9+7\) BZOJ题面 题意:求\(n*2^{\frac ...

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

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

  3. [题解] CF932E Team Work

    CF932E Team Work 你现在手里有\(n\)个人,你要选出若干个人来搞事情(不能不选),其中选择\(x\)个人出来的代价是\(x^k\),问所有方案的代价总和. 数据范围:\(1\le n ...

  4. cf932E. Team Work(第二类斯特灵数 组合数)

    题意 题目链接 Sol 这篇题解写的非常详细 首先要知道第二类斯特灵数的一个性质 \[m^n = \sum_{i = 0}^m C_{n}^i S(n, i) i!\] 证明可以考虑组合意义:\(m^ ...

  5. 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 ...

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

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

  7. 【学术篇】CF932E Team Work && bzoj5093 图的价值

    两个题的传送门 对于CF这道题, 分别考虑每种可能的集合大小, 每个大小为\(k\)的集合数量有\(\binom nk\)个, 所以最后的答案就是 \[\sum_{i=0}^n\binom{n}{i} ...

  8. WC2019 填坑记

    2019年1月8日 1.Luogu P2147 [SDOI2008]洞穴勘测 (LCT模板题&LCT学习) 2019年1月9日 2.LuoguP3203 [HNOI2010]弹飞绵羊  (LC ...

  9. FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ

    因为垃圾电脑太卡了就重开了一个... 前传:多项式Ⅰ u1s1 我预感还会有Ⅲ 多项式基础操作: 例题: 26. CF438E The Child and Binary Tree 感觉这题作为第一题还 ...

随机推荐

  1. 寻求js

    寻找登录的post地址 在form表单中寻找action对应的url地址 post的数据是input标签中的name值作为键,真正的用户名密码作为值得字典,post的url地址就是action对应的u ...

  2. swust oj 1068

    图的按录入顺序深度优先搜索     5000(ms)         10000(kb)   Tags: 深度优先     图的深度优先搜索类似于树的先根遍历,即从某个结点开始,先访问该结点, 然后深 ...

  3. PHP(基础语法:执行原理)

    控制语句for循环 for(var i=0:i<0;++i){ }(基础语法):执行原理for:用在已知数量的情况下(循环次数)while:循环次数不确定(满足某个条件退出循环) 死循环:没有结 ...

  4. Python学习之旅(三十六)

    Python基础知识(35):电子邮件(Ⅱ) 收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上 收取邮件最常用的协议是POP协议,目前版本号是3,俗称POP3 Pytho ...

  5. oracle的高级查询

    1.简单连接 基本连接语法:SELECT [ALL|DISTINCT]column_name[,expression…]FROM table1_name[,table2_name,view_name, ...

  6. HDU 1010生成树

    求起点到终点的最短权值和

  7. 用VsCode写Markdown

    Markdown 基本语法 段落 非常自然,一行文字就是一个段落. 比如: 这是一个段落 会被解释成: <p>这是一个段落.</p> 如果你需要另起一段,请在两个段落之间隔一个 ...

  8. 20165311 ch02 课下作业

    补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点) 完成教材 p97 2.96 2.97,要有完备的

  9. 使用dom4j中SAXReader解析xml数据

    public ApiConfig(String configFilePath) throws DocumentException{ SAXReader reader = new SAXReader() ...

  10. 2018-2019-2 20175313 实验一《Java开发环境的熟悉》实验报告

    一.实验内容及步骤 使用JDK编译.运行简单的Java程序 cd code进入code文件夹 mkdir 20175313创建20175313文件夹 ls查看当前目录 cd 20175313,mkdi ...