思路

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

题目要求\(\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. react better-scroll 编写类似手机chrome的header显示隐藏效果

    关键代码 const H = 50; // header的高度 const H2 = H / 2; let cy = 0; class Home extends Component { @observ ...

  2. Git 与 SVN 命令学习笔记

    一:Git git config --global user.name "you name"   #设置用户名git config --global user.email &quo ...

  3. __super:: 使用

    它会调用 基类的函数方法实现. __super::Close(); __super::Find();

  4. js判断PC端还是移动端

    function goPAGE() { if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobi ...

  5. PrimeNG之FileUpload

    --文件上传是一个支持拖放,多文件上传,自动上传,进度跟踪和验证的上传. Import import {FileUploadModule} from 'primeng/primeng'; Gettin ...

  6. scala-创建泛型数组(T: Manifest)

    def arrayT[T: Manifest](ary: T*): Array[T] = {//接受多个参数 val arys = new Array[T](ary.length) //初始化一个数组 ...

  7. @Value("${xxxx}")注解的配置及使用

    代码中的用法 Spring 通过@Value注解获取*.porperties文件code的内容,然后赋值给使用该注解的Code属性上. @Value("${code}") priv ...

  8. JDK 1.8源码阅读 LinkList

    一,前言 LinkedList是一个实现了List接口和Deque接口的双端链表.有关索引的操作可能从链表头开始遍历到链表尾部,也可能从尾部遍历到链表头部,这取决于看索引更靠近哪一端. LinkedL ...

  9. i++与++i区别

    ++i:先执行i加1,再执行语句; i++:先执行语句,再i加1; 后置自操作:先把自己所保存的值留下来,然后改变自己,自己给别人的值是原来的值: 前置自操作:先把自己改变,然后把改变后的值给别人. ...

  10. ServletContext详解(转)

    ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放.request,一个用户可有多个:session,一个用户一个:而servletContext,所 ...