2018.12.14 codeforces 932E. Team Work(组合数学)
传送门
组合数学套路题。
要求ans=∑i=0nCni∗ik,n≤1e9,k≤5000ans=\sum_{i=0}^n C_n^i*i^k,n\le 1e9,k\le 5000ans=∑i=0nCni∗ik,n≤1e9,k≤5000
这道题需要用到一个组合数的公式:nk=∑i=0ns2{k,i}Anin^k=\sum_{i=0}^ns_2\{k,i\}A_n^ink=∑i=0ns2{k,i}Ani
证明可以用组合意义:相当于是把k个不同的球放入k个不同的盒子里(每个盒子个数任意)的方案数等于先枚举使用盒子的个数i,然后把n个球分进i个盒子,然后给盒子编号。
所以原式=∑i=0nCni∗∑j=0ks2{k,j}Aij=\sum_{i=0}^nC_n^i*\sum_{j=0}^ks_2\{k,j\}A_i^j=∑i=0nCni∗∑j=0ks2{k,j}Aij
=∑i=0n∑j=0ks2{k,j}AijCni=\sum_{i=0}^n\sum_{j=0}^ks_2\{k,j\}A_i^jC_n^i=∑i=0n∑j=0ks2{k,j}AijCni
=∑j=0ks2{k,j}∑i=0kCniAij=\sum_{j=0}^ks_2\{k,j\}\sum_{i=0}^kC_n^iA_i^j=∑j=0ks2{k,j}∑i=0kCniAij
然后又是套路,把后面一个求和公式用组合意义化简:
∑i=0nCniAij\sum_{i=0}^nC_n^iA_i^j∑i=0nCniAij相当于先从n个数中选出来i个数来组合再从i个数中选出j个数来排列,注意这个地方j是定值。
那么从总体思考,相当于就是从n个数中选出了j个数来排列,剩下的n−jn-jn−j个数都可选可不选。
所以有:∑i=0nCniAij=Anj2n−j\sum_{i=0}^nC_n^iA_i^j=A_n^j2^{n-j}∑i=0nCniAij=Anj2n−j
所以推出原式=∑j=0ks2{k,j}Anj2n−j=\sum_{j=0}^ks_2\{k,j\}A_n^j2^{n-j}=∑j=0ks2{k,j}Anj2n−j
至此,已经可以O(n2)O(n^2)O(n2)求出答案了。
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
const int mod=1e9+7,K=5e3+5;
typedef long long ll;
int ans=0,n,k,s2[K][K],up;
inline void init(){
s2[1][1]=1,up=min(n,k);
for(ri i=2;i<=k;++i)for(ri j=1;j<=i;++j)s2[i][j]=((ll)s2[i-1][j-1]+(ll)s2[i-1][j]*j%mod)%mod;
}
inline int ksm(int a,int p){int ret=1;for(;p;p>>=1,a=(ll)a*a%mod)if(p&1)ret=(ll)ret*a%mod;return ret;}
inline int A(int n,int m){int ret=1;for(ri i=n-m+1;i<=n;++i)ret=(ll)ret*i%mod;return ret;}
int main(){
scanf("%d%d",&n,&k),init();
for(ri i=1;i<=up;++i)(ans+=(ll)s2[k][i]*A(n,i)%mod*ksm(2,n-i)%mod)%=mod;
cout<<ans;
return 0;
}
2018.12.14 codeforces 932E. Team Work(组合数学)的更多相关文章
- 2018.12.14 codeforces 922E. Birds(分组背包)
传送门 蒟蒻净做些水题还请大佬见谅 没错这又是个一眼的分组背包. 题意简述:有n棵树,每只树上有aia_iai只鸟,第iii棵树买一只鸟要花cic_ici的钱,每买一只鸟可以奖励bbb块钱,从一棵 ...
- codeforces 932E Team Work(组合数学、dp)
codeforces 932E Team Work 题意 给定 \(n(1e9)\).\(k(5000)\).求 \(\Sigma_{x=1}^{n}C_n^xx^k\). 题解 解法一 官方题解 的 ...
- Codeforces 932E Team work 【组合计数+斯特林数】
Codeforces 932E Team work You have a team of N people. For a particular task, you can pick any non-e ...
- 2018.12.14 浪在ACM 集训队第九次测试赛
浪在ACM 集训队第九次测试赛 B Battleship E Masha and two friends B 传送门 题意: 战船上有占地n*n的房间cells[][],只由当cells[i][j]= ...
- Codeforces 932E Team Work 数学
Team Work 发现网上没有我这种写法.. i ^ k我们可以理解为对于每个子集我们k个for套在一起数有多少个. 那么我们问题就变成了 任意可重复位置的k个物品属于多少个子集. 然后我们枚举k个 ...
- 2018.12.29 codeforces 940E. Cashback(线性dp)
传送门 题意:给出一个nnn个数的序列,要求将序列分成若干段,对于一段长度为kkk的自动删去最小的⌊kc⌋\left \lfloor \frac{k}{c} \right \rfloor⌊ck⌋个数 ...
- 2018.12.19 codeforces 1092F. Tree with Maximum Cost(换根dp)
传送门 sbsbsb树形dpdpdp题. 题意简述:给出一棵边权为1的树,允许选任意一个点vvv为根,求∑i=1ndist(i,v)∗ai\sum_{i=1}^ndist(i,v)*a_i∑i=1n ...
- 2018.12.15 codeforces 920F. SUM and REPLACE(线段树)
传送门 线段树入门题. 给你一个序列:支持区间修改成自己的约数个数,区间求和. 实际上跟区间开方一个道理. 2的约数个数为2,1的约数个数为1,因此只要区间的最大值小于3就不用修改否则就暴力修改. 因 ...
- 2018.12.08 codeforces 939E. Maximize!(二分答案)
传送门 二分答案好题. 题意简述:要求支持动态在一个数列队尾加入一个新的数(保证数列单增),查询所有子数列的 最大值减平均值 的最大值. 然而网上一堆高人是用三分做的. 我们先考虑当前的答案有可能由什 ...
随机推荐
- MYSQL 插入数据乱码
1.最近在写电商项目 遇见过向数据库中加入数据乱码问题 最开始以为是,数据库的问题但是一看 没问题啊 于是又看了项目的默认编码,也没问题啊 那么问题来了,在哪出现了问题呢 于是 博主 在 tomact ...
- 【zipkin】链路追踪
1,安装zipkin:https://zipkin.io/pages/quickstart.html 推荐使用docker去安装zipkin服务,下载安装执行都有了.缺点是下载要等待一段时间 2,使用 ...
- java 基础之--类加载器的过程
先来段代码,大家瞧瞧运行pritln的结果是什么?(认真想一想哦
- 微信小程序 wxml中的属性记录
1. view 标签中的属性 style 中的参数 margin-top:10px; (向上距离) display : flex; (display : flex 容器声明) flex-direc ...
- mysql中各种join连表查询总结
通常我们需要连接多个表查询数据,以获取想要的结果. 一.连接可以分为三类: (1) 内连接:join,inner join (2) 外连接:left join,left outer join,righ ...
- ORACLE分组查询和统计等
select flow_id,rw from (select t.flow_id ,rownum as rw from apex_030200.wwv_flow_list_templates t) ...
- 地图调起URI API(通过连接直接调用百度地图)
网站:http://lbsyun.baidu.com/index.php?title=uri/api/web 地图调起URI API 百度地图URI API是为开发者提供直接调起百度地图产品(百度We ...
- session是什么
初识session,跟大家一起学习下 session是什么 首先,我们需要知道session是什么.我们普遍将session称之为会话控制.说实在的,我现在也不清楚session到底算是什么.我个人认 ...
- PAT 1067 试密码(20)(代码)
1067 试密码(20 分) 当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死.本题就请你实现这个小功能. 输入格式: 输入在第一行给出一个密码(长度 ...
- andorid 帧布局
framelayout.xml帧布局 <?xml version="1.0" encoding="utf-8"?> <FrameLayout ...