hdu 5209 Magic Toy Brick
来源:互联网 发布:中国电网logo知乎 编辑:程序博客网 时间:2024/06/08 18:30
我们先考虑对于一行p个人有多少种图案,首先撇去顺序,我们社xi表示h为i的个数,所以x1+....+xm=p,xi>=0因为大小是确定的所以不用管大小顺序,所以方案数是
C(p+m-1,m-1),所以剩下的就是dp,我们令dp[i]表示砖头数为i的方法数,我们只需考虑第一行假如是j那么dp[i]+=dp[i-j]*C(i-1,j-1)*C(j+m-1,m-1)(因为第一块肯定是第一行,剩下j-1块要从i-1块里选)。
#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<iostream>using namespace std;const int mod=1000000007;const int maxn=110005;typedef long long LL;LL jie[maxn],jie2[maxn];int mm(int n,int m){ LL s=1,k=n; while(m>0){ if(m&1){ s=s*k; s%=mod; } k=k*k; k%=mod; m>>=1; } return s;}int zuhe(int n,int m){ LL s; s=jie[n]; s=s*jie2[m]; s%=mod; s=s*jie2[n-m]; s%=mod; return s;}void init(void){ int i; jie[0]=1; jie2[0]=1; for(i=1;i<=110000;i++){ jie[i]=jie[i-1]*i; jie[i]%=mod; jie2[i]=mm(jie[i],mod-2); }}LL dp[1005];int main(){ int i,j,n,m,t,N=0; cin>>t; init(); while(t--){ cin>>n>>m; memset(dp,0,sizeof(dp)); dp[0]=1; for(i=1;i<=n;i++){ for(j=1;j<=i;j++){ dp[i]+=zuhe(i-1,j-1)*((dp[i-j]*zuhe(j+m-1,m-1))%mod); dp[i]%=mod; } } printf("Case #%d: %d\n",++N,dp[n]); }}
0 0
- hdu 5209 Magic Toy Brick
- HDU 5209 Magic Toy Brick
- 【hdu】 Toy Storage 几何
- hdu 2481 Birthday Toy
- Birthday Toy HDU
- HDU 2354 Another Brick in the Wall
- HDU-2354-Another Brick in the Wall
- HDU 2481 Toy(Polya综合)
- hdu 3794 Magic Coupon
- hdu 1153 magic bitstrings
- hdu 4323 Magic Number
- hdu 3794 Magic Coupon
- hdu 4648 Magic Pen
- HDU 4648 magic pen
- hdu 4427 Math Magic
- Hdu 4323 Magic Number
- hdu 4427 Math Magic
- HDU 4427 Math Magic
- LeetCode - Roman to Integer
- 记录jquey的学习过程
- 推荐系统
- no qualifying bean of type [...] is define
- 文件的复制io
- hdu 5209 Magic Toy Brick
- 换电脑后,Winform 控件被遮挡
- 解密FFmpeg播放track mode控制
- java基础1
- Android学习 - sendBroadcast和sendStickyBroadcast
- php提示Notice: Undefined variable:
- 深入Java集合学习系列:LinkedHashMap的实现原理
- RELP(Reliable Event Logging Protocol)
- eclipse:JVM terminated. Exit code=14