Codeforces848D Shake It! -- DP
来源:互联网 发布:fc存储网络 编辑:程序博客网 时间:2024/05/23 02:06
令
枚举
其中
然后考虑优化。
令
由调和级数可知,枚举
时间复杂度
代码
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;#define N 60#define M 1000000007inline void Add(int& x,int y){x=(x+y)%M;}int i,j,k,n,m,p,q,f[N][N],g[N][N],F[N][N],t,inv[N];int c;int main(){ scanf("%d%d",&n,&m); for(i=2,inv[0]=inv[1]=1;i<=n;i++)inv[i]=1ll*inv[M%i]*(M-M/i)%M; f[0][1]=1; for(i=1;i<=n;i++) for(j=1;j<=i+1;j++){ for(p=0;p<=i-1;p++){ for(q=j;q<=p+1;q++) Add(g[i][j],1ll*f[p][q]*f[i-1-p][j]%M); for(q=j+1;q<=i-p;q++) Add(g[i][j],1ll*f[p][j]*f[i-1-p][q]%M); } memset(F,0,sizeof(F)); for(k=0;k<=n;k++) for(p=1;p<=k+1;p++){ c=1; for(q=1;k+q*i<=n;q++){ c=1ll*c*(g[i][j]+q-1)%M*inv[q]%M; Add(F[k+q*i][p+q*j],1ll*f[k][p]*c%M); } } for(k=0;k<=n;k++) for(p=1;p<=k+1;p++) Add(f[k][p],F[k][p]); } cout<<f[n][m]<<endl; return 0;}
阅读全文
1 0
- Codeforces848D Shake It! -- DP
- codeforces 848D. Shake It!
- shake
- SHAKE
- shake
- shake插补器
- Fair shake 一视同仁
- detect iphone shake
- ios中的shake
- poj 2317 SHAKE
- Shake Android UI Elements
- Camera Shake in Unity
- ios shake手势
- 2004-view-animation-shake
- JAVA连接Shake方法
- AccelerometerSensor--- shake案例
- Shake动画实现
- shake摇头效果
- PyTorch还是TensorFlow?这有一份新手指南
- 域名解析
- PATbasic1003
- html5 学习笔记
- 软件测试题(1)
- Codeforces848D Shake It! -- DP
- C++ 位运算技巧
- CodeForces 271 A.Beautiful Year(水~)
- Leetcode 405. Convert a Number to Hexadecimal
- git常用命令行
- 函数圈复杂度介绍
- [ahk]使total commander在单双窗口间切换
- 1、常用命令练习
- 【广告项目】URL后面拼接参数中文乱码