核💗: 这道题求二项分布E(x^k)的期望, 刚才是照着E(X^2)展开化简得到np(1-p)的形式化简,但是失败了
后来发现这道题可以用数学期望的独立性来做,动态规划-233
先说一下期望的性质与证明:
用概率密度函数证明貌似很好证明:
我们可以把二项分布实验看作是n次伯努利实验, x=x1+x2+...+xn
那么x^k=(x1+..xn)*(x1+..xn)*...*(x1+..xn)
x^k中所有元素可以根据所含xi种类数分为k类, 同一类具有相同的数学期望. 比如k=3,n=3时, x1x2x2与x1x1x2具有相同数学期望p^2
我们设立这样的状态dp[i][j]->表示x^i次方展开项有j类xi, 那么dp[i][j]=dp[i-1][j]*j+dp[i-1][j-1]*(n-j+1)
E(X^k)=dp[k][1]*p+dp[k][2]*p^2+...dp[k][k]*p^k
好啦,问题解决了....ps(mt,好想你)
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 const int N=1007; 5 const LL mod=1e9+7; 6 const LL x=570000004;// 100关于mod的逆元 7 LL dp[N][N]; 8 LL n,p,k; 9 int main () 10 { 11 while (~scanf("%lld %lld %lld",&n,&k,&p)) { 12 p=p*x%mod; 13 memset (dp,0,sizeof(dp)); 14 dp[1][1]=n; 15 for (int i=2;i<=k;i++) 16 for (int j=1;j<=i;j++) 17 dp[i][j]=( dp[i-1][j]*j+dp[i-1][j-1]*(n-j+1)%mod )%mod; 18 LL sum=0; LL t=p; 19 for (int i=1;i<=k;i++) { 20 sum=(sum+t*dp[k][i])%mod; 21 t=t*p%mod; 22 } 23 printf("%lld\n",sum); 24 } 25 return 0; 26 }
抓住青春的尾巴。。。