计数dp+概率+大数——(抽屉问题解的个数)zoj3380

难的地方在于计数dp。。给定范围[1,n]的数去填m个位置,要求不能出现超过I个相同的数,

那就用dp[i][j]表示在阶段i,已经填了j个位置的可能解法,那么只要枚举i填的位置数k∈[0,min(j,I-1)]进行状态转移即可

 

/*
范围在[1,n]取m次,问有>=I个数相同的概率
那么分母必定是m^n
现在来看分子,因为>=I,I+1,....n的计数不好求,所以转化为计数 <I 的个数即可

1-n之间的数填m次 每个数最多填I-1次,可以用dp[i,j]表示用1-i个数填了j次的个数
转移方程如下:数i填了k次,即从i-1填剩下的位置中挑了k个,0<=k<=min(I-1,j)(i可以不填,但最多只能填I-1次) 
dp[i,j]=sigma dp[i-1,j-k]*C( m-(j-k),k )
三重循环 i j k 
初始化dp[0][0]=1

要用大数写。。 
*/

 

posted on 2019-06-17 21:36  zsben  阅读(175)  评论(0编辑  收藏  举报

导航