本文主要是介绍20200416 T3 寻找天哥【组合向量的模长的幂的期望】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
题目分析:
略微转化后,即给出一些向量 ( a i x i , b i x i , c i x i ) (a_ix_i,b_ix_i,c_ix_i) (aixi,bixi,cixi),其中 x i x_i xi是随机分布在 [ 0 , 1 ] [0,1] [0,1]的实数,设 R R R为向量全部相加后的模长,求 E ( R 4 ) E(R^4) E(R4)
思路一般是将式子层层分解为独立的几部分,然后相乘。
首先有 R 2 = ( ∑ i = 1 n a i x i ) 2 + ( ∑ i = 1 n b i x i ) 2 + ( ∑ i = 1 n c i x i ) 2 R^2=(\sum_{i=1}^na_ix_i)^2+(\sum_{i=1}^nb_ix_i)^2+(\sum_{i=1}^nc_ix_i)^2 R2=(∑i=1naixi)2+(∑i=1nbixi)2+(∑i=1ncixi)2
令这三项分别为 A , B , C A,B,C A,B,C,那么答案就是:
E ( A 4 + B 4 + C 4 + 2 ( A 2 B 2 + B 2 C 2 + C 2 A 2 ) ) E(A^4+B^4+C^4+2(A^2B^2+B^2C^2+C^2A^2)) E(A4+B4+C4+2(A2B2+B2C2+C2A2))
因为对于 i ≠ j i\neq j i=j, x i x_i xi和 x j x_j xj是独立的,所以可以尝试一个一个添加进去:
设 f t , i , j , k f_{t,i,j,k} ft,i,j,k表示已经考虑了前 t t t个向量, A i ∗ B j ∗ C k A^i*B^j*C^k Ai∗Bj∗Ck的期望。
对于新添加的第 t t t个向量,考虑它对 f t − 1 f_{t-1} ft−1的影响,设新添加的向量为 ( A ′ , B ′ , C ′ ) (A',B',C') (A′,B′,C′)
f t , i , j , k = E ( ( A + A ′ ) i ( B + B ′ ) j ( C + C ′ ) k ) = E ( ∑ x ∑ y ∑ z ( i x ) ( j y ) ( k z ) A x A ′ i − x B y B ′ j − y C z C ′ k − z ) = ∑ x ∑ y ∑ z ( i x ) ( j y ) ( k z ) E ( A x B y C z ) ∗ E ( A ′ i − x B ′ j − y C ′ k − z ) f_{t,i,j,k}=E((A+A')^i(B+B')^j(C+C')^k)\\=E(\sum_x\sum_{y}\sum_z\binom{i}{x}\binom jy\binom kzA^xA'^{i-x}B^yB'^{j-y}C^zC'^{k-z})\\=\sum_x\sum_{y}\sum_z\binom{i}{x}\binom jy\binom kzE(A^xB^yC^z)*E(A'^{i-x}B'^{j-y}C'^{k-z}) ft,i,j,k=E((A+A′)i(B+B′)j(C+C′)k)=E(x∑y∑z∑(xi)(yj)(zk)AxA′i−xByB′j−yCzC′k−z)=x∑y∑z∑(xi)(yj)(zk)E(AxByCz)∗E(A′i−xB′j−yC′k−z)第一个 E E E就是 f t − 1 , x , y , z f_{t-1,x,y,z} ft−1,x,y,z,第二个 E E E即为形如 E ( a t i b t j c t k x i + j + k ) E(a_t^ib_t^jc_t^kx^{i+j+k}) E(atibtjctkxi+j+k)的值。
而 ∫ 0 1 x p d x = 1 p + 1 \int_0^1x^pdx=\frac 1{p+1} ∫01xpdx=p+11,所以 E ( a t i b t j c t k x i + j + k ) = a t i b t j c t k i + j + k + 1 E(a_t^ib_t^jc_t^kx^{i+j+k})={a_t^ib_t^jc_t^k\over i+j+k+1} E(atibtjctkxi+j+k)=i+j+k+1atibtjctk
好像还蛮简单的?
Code:
#include<bits/stdc++.h>
#define maxn 3005
#define rep(i,j,k) for(int i=(j);i<=(k);i++)
using namespace std;
const double Pi = acos(-1);
int n,CC[5][5];
double pa[5],pb[5],pc[5],f[2][5][5][5],e[5][5][5];
int main()
{freopen("find.in","r",stdin);freopen("find.out","w",stdout);for(int i=(CC[0][0]=1);i<=4;i++)for(int j=(CC[i][0]=1);j<=i;j++)CC[i][j]=CC[i-1][j-1]+CC[i-1][j];double Alpha,Beta,L,a,b,c;while(scanf("%d",&n),n){int now=0; memset(f,0,sizeof f),f[now][0][0][0]=1;for(int t=1;t<=n;t++,now=!now){scanf("%lf%lf%lf",&Alpha,&Beta,&L);a=L*cos(Beta)*cos(Alpha),b=L*cos(Beta)*sin(Alpha),c=L*sin(Beta);pa[0]=pb[0]=pc[0]=1;rep(i,1,4) pa[i]=pa[i-1]*a,pb[i]=pb[i-1]*b,pc[i]=pc[i-1]*c;rep(i,0,4) rep(j,0,4) rep(k,0,4) e[i][j][k]=pa[i]*pb[j]*pc[k]/(i+j+k+1);memset(f[!now],0,sizeof f[!now]);rep(A,0,4) rep(B,0,4) rep(C,0,A&&B?0:4)rep(i,0,A) rep(j,0,B) rep(k,0,C)f[!now][A][B][C]+=f[now][A-i][B-j][C-k]*CC[A][i]*CC[B][j]*CC[C][k]*e[i][j][k];}double R4=f[now][4][0][0]+f[now][0][4][0]+f[now][0][0][4]+2*(f[now][2][2][0]+f[now][2][0][2]+f[now][0][2][2]);printf("%.6f\n",Pi/3*R4);}
}
这篇关于20200416 T3 寻找天哥【组合向量的模长的幂的期望】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!