题目链接

戳我

题意

有\(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. 初学者手册-IDEA常用快捷键

    一.快速创建基于某个接口的类(引入相关包) 左键选择接口名称,使用快捷键Alt+enter,然后实现该类 二.打开选中的文件所在的文件夹 点选需要打开的文件,右键菜单,点击“Show in Explo ...

  2. print 函数用法总结

    1. 字符串和数值类型 >>> print(1) 1 >>> print("Hello World") Hello World 2.变量无论什么 ...

  3. ubuntu安装composer

    1.下载composer.phar wget https://getcomposer.org/composer.phar 2.重命名composer.phar为composer mv composer ...

  4. kali下启动postgresql

    1.service postgresql start 2.su postgres 3.psql

  5. 关于 Mybatis的原生连接池 和 DBCP 连接池

    一 遇到的问题:  项目用的play框架,数据库DB2, 持久化框架是Mybatis, 连接池用的是Mybatis原生的,遇到的问题是:有时候抛出如下异常: play.api.UnexpectedEx ...

  6. 安卓端后台登录接口单元测试demo

    package com.js.ai.modules.pointwall.interfac; import java.io.IOException; import java.io.Unsupported ...

  7. java - 读取,导出 excel文件数据

    首先需下载poi java包,添加至构建路径, 写处理方法: import java.io.FileInputStream;import java.io.FileOutputStream;import ...

  8. DPtoLP/LPtoDP 和 ScreenToClient/ClientToScreen

    设备坐标(Device Coordinate)又称为物理坐标(Physical Coordinate),是指输出设备上的坐标.通常将屏幕上的设备坐标称为屏幕坐标.设备坐标用对象距离窗口左上角的水平距离 ...

  9. 使用Statement接口实现增,删,改操作(工作中不常用这个,而用PreparedStatement接口)

    一.Statement接口 作用:用于执行静态 SQL 语句并返回它所生成结果的对象. 1. 创建数据库连接类及相册实体,代码如下: package com.learn.jdbc.util; impo ...

  10. python asyncio 异步实现mongodb数据转xls文件

    from pymongo import MongoClient import asyncio import xlwt import json class Mongodb_Transfer_Excel( ...