题目链接

戳我

题意

有\(n\)个箱子,从中选出\(i\)个箱子,然后把\(k\)个不同的球装在这\(i\)个箱子中,求方案数。

实际上这题就是求:

\[\sum_{i=1}^nc_n^i*i^k
\]

不知道为什么翻译直接把这个写出来了,莫名其妙。

直接求这个式子肯定不行,\(n\)很大会超时,所以我们应该化简式子

\[\sum_{i=1}^nc_n^i*i^k
\]

\[=\sum_{i=0}^nc_n^i*i^k
\]

根据第二类斯特林数的性质:

\[n^k=\sum_{i=0}^nS(k,i)*i!*C(n,i)
\]

所以式子可以继续化简:

\[=\sum_{i=0}^nc_n^i*\sum_{j=0}^kS(k,j)*j!*C(i,j)
\]

\[=\sum_{i=0}^nc_n^i*\sum_{j=0}^kS(k,j)*j!*\frac{i!}{j!*(i-j)!}
\]

\[=\sum_{i=0}^nc_n^i*\sum_{j=0}^kS(k,j)*\frac{i!}{(i-j)!}
\]

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

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

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

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

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

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

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

所以这就可以直接做了

code

#include<cstdio>
#define rg register
#define file(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
using namespace std;
typedef long long ll;
const int mod=1e9+7;
inline int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9') f=(c=='-')?-1:1,c=getchar();
while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();
return f*x;
}
ll s[5011][5011];
int n,k;
inline void init(){
s[0][0]=1;
for(rg int i=1;i<=k;i++)
for(rg int j=1;j<=i;j++)
s[i][j]=(s[i-1][j-1]+j*s[i-1][j])%mod;
}
inline ll ksm(int b){
ll ans=1,a=2;
while(b){
if(b&1)
ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans%mod;
}
main(){
n=read(),k=read();
init();
ll p=ksm(n),ans=0,js=1,inv=ksm(mod-2);
for(rg int i=0;i<=k;i++){
ans+=s[k][i]*p%mod*js,p*=inv,p%=mod;
ans%=mod;
js=js*(n-i)%mod;
}
printf("%lld",ans);
return 0;
}

「CF932E」 Team Work的更多相关文章

  1. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  2. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  3. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  4. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  5. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  6. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  7. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  8. 「2014-3-17」C pointer again …

    记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...

  9. 「2014-3-13」Javascript Engine, Java VM, Python interpreter, PyPy – a glance

    提要: url anchor (ajax) => javascript engine (1~4 articles) => java VM vs. python interpreter =& ...

随机推荐

  1. composer 发布自己的开源软件

    首先创建一个github项目. 在项目中,创建一个composer.json文件. { "name": "jiqing9006/valid", "de ...

  2. Java面向对象-static关键字、静态方法与普通方法、静态成员变量

    Java面向对象-static关键字.静态方法与普通方法 static关键字的基本作用:方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于 ...

  3. Coins and Queries(codeforce 1003D)

    Polycarp has nn coins, the value of the i-th coin is aiai . It is guaranteed that all the values are ...

  4. 14-EasyNetQ之用Future Publish发布预定中事件

    很多商业流程需要事件在未来的时间按照预定时间发布.例如,在初次与客户接触后,可以在未来某个时间去电话回访客户.EasyNetQ可以用它的Future Publish功能帮你实现这个功能.举例:这里我们 ...

  5. java中的报错机制

    异常:Exception,程序运行过程中因为一些原因,使得程序无法运行下去 注意:在程序能够运行起来的情况,不是程序编译通不过 举例:读文件,点击一个按钮,文件不存在:访问数据库服务器,数据库服务器停 ...

  6. s=1+2*3+4*5*6+7*8*9*10+.... C语言求解

    #include <stdio.h> /*类似斐波那契数列的计算方式 项 1 2 3 4 1 2*3 4*5*6 7*8*9*10 生成项的起始数字 1 2 4 7 和后一项的差值 1 2 ...

  7. The 1st day of learning Python

    This is the first day of studying Python. From 3PM to now, It has taken me nearly 5 hours to 初步了解 py ...

  8. 文件流的处理 C C++

    C: 借鉴C 文件操作库函数总结 eg: #include <fstream> #include <iostream> #include <cstdio> usin ...

  9. Python中__new__与__init__介绍

    在python2.x中,从object继承得来的类称为新式类(如class A(object))不从object继承得来的类称为经典类(如class A()) 新式类跟经典类的差别主要是以下几点: 1 ...

  10. laravel查询最后执行的一条sql语句