Codeforces 932E. Team Work-数学

传送门

题意:

给定n,k,求 nr=1Crnrk ∑ r = 1 n C n r r k

n<=1e9,k<=5e3 n <= 1 e 9 , k <= 5 e 3

Solution:

冥思苦想数论方式……..最后GG

题解让人眼前一亮:

定义函数 f(x)=(1+x)n=nr=0Crnxr f ( x ) = ( 1 + x ) n = ∑ r = 0 n C n r x r

那么我们对他求一次导: f(x)=n(1+x)n1=nr=1Crnrxr1 f ′ ( x ) = n ( 1 + x ) n − 1 = ∑ r = 1 n C n r r x r − 1

再把这个式子乘一个x: xf(x)=nx(1+x)n1=nr=1Crnrxr x f ′ ( x ) = n x ( 1 + x ) n − 1 = ∑ r = 1 n C n r r x r

然后我们发现:对于 f(x) f ( x ) ,题目所给的公式就是我们对它进行上面的操作(求导后乘x)k次后x=1的值

那么这道题现在就转化成关于 f(x) f ( x ) 的问题了

f[a][b][c] f [ a ] [ b ] [ c ] 是对 xb(1+x)c x b ( 1 + x ) c 做a次操作后x=1的值

那么最终的答案即为 f[k][0][n] f [ k ] [ 0 ] [ n ]

转移依据高中知识: f[a][b][c]=bf[a1][b][c]+cf[a1][b+1][c1] f [ a ] [ b ] [ c ] = b ∗ f [ a − 1 ] [ b ] [ c ] + c ∗ f [ a − 1 ] [ b + 1 ] [ c − 1 ]

a=0时, f[a][b][c]=2c f [ a ] [ b ] [ c ] = 2 c

进行记忆化搜索即可

虽然状态是三维的,但是因为b+c恒等于n,所以我们的复杂度实际上是 O(k2) O ( k 2 )

注意特判边界情况

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int f[5010][5010];
int n,k;
const int mod=1e9+7;
int fast_pow(int x,int a)
{
    int ans=1;
    for (;a;a>>=1,x=1ll*x*x%mod) if (a&1) ans=1ll*ans*x%mod;
    return ans;
}
int dp(int a,int b)
{
    if (b>n) return 0;
    if (f[a][b]>=0) return f[a][b];
    int c=n-b;
    if (a==0) {f[a][b]=fast_pow(2,c);return f[a][b];}
    f[a][b]=(1ll*b*dp(a-1,b)+1ll*c*dp(a-1,b+1))%mod;
    return f[a][b];
}
int main()
{
    scanf("%d%d",&n,&k);
    memset(f,-1,sizeof(f));
    printf("%d",dp(k,0));
}
全部评论

相关推荐

06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务