日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu 5570(数学期望)

發布時間:2025/3/16 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 5570(数学期望) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=5570

【分析】


用A[i][j]表示第i個球為顏色j的概率
用c[j]表示顏色為j的球的個數
用E[x]表示式子x的期望,顯然有E[X[i][j]]=A[i][j]*1+(1-A[i][j])*0=A[i][j]
用P[x]表示事件x發生的概率
題目所要求的是E[c[1]^2 +c[2]^2 +c[3]^2+...+c[m]^2]
按照期望的線性相加特性,題目所求的就是∑(j=1~m)E[c[j]^2]=E[c[1]^2]+E[c[2]^2]+...+E[c[m]^2];


一上來就研究概率,思路很難入手,難度會大一點。
于是我們不妨對于一個單獨的狀態(就是每個小球的顏色都確定)做研究——
用X[i][j]表示第i個球是否為第j種顏色,如果是,X[i][j]為1;否則,X[i][j]為0。
那么,c[j]=X[1][j]+X[2][j]+...+X[n][j].
回到∑(j=1~m)E[c[j]^2],它便可以寫成——
=∑(j=1~m)E[(X[1][j]+X[2][j]+...+X[n][j])^2]
對于元素個數的平方,如何考慮其疊加性質,從貢獻上,通過加法來簡化問題?
元素個數的平方,等于元素的pair數(pair自然也包括[自身,自身]這一個)。
于是,上式又可以化為——
=∑(for j=1~m--for p=1~n--for q=1~n)E[ X[p][j]*X[q][j] ]


我們上面研究的某一個狀態下的答案。然而我們還需要把其轉化為概率來思考。
然而,在嘗試化簡的時候,我們注意點:E[X[p][j] * X[q][j]](p!=q)和 E[X[p][j]* X[p][j]] 是不一樣的
因為對于E[X[p][j] * X[q][j]]來說,并結合上面確定的E[X[i][j]]=A[i][j]——
如果p!=q,那么這兩個隨機變量互相獨立=E[X[p][j]] * E[X[q][j]] =A[p][j]*A[q][j]
如果p==q,那么E[ X[p][j]*X[p][j] ]=E[X[p][j]]=A[p][j]


于是,對于這道題的答案,式子先變成了——
∑(for j=1~m)
{
∑(for p=1~n)
{
∑(for q=1~n&&q!=p){A[p][j]*A[q][j]}
+A[p][j]
}
}


再化簡一下,最后的式子就是——
∑(for j=1~m)
{
( ∑(for i=1~n)A[i][j] )^2
-∑(for i=1~n)A[i][j]^2 //這個是( ∑(for i=1~n)A[i][j] )^2中多算的量,減掉。
+∑(for i=1~n)A[i][j] //這個是真正應該算入的量,加上去。
}
我們發現,這個復雜度確實只有O(nm),這道題就做完啦~~


【時間復雜度&&優化】

O(nm)


參考博客:http://blog.csdn.net/snowy_smile/article/details/50032485

#include<iostream> #include<cstdio> #include<cstring> using namespace std;const int maxn = 1005; int n,m; double p[maxn][maxn];int main() {while(scanf("%d%d",&n,&m)!=EOF){for(int i = 1; i <= n; i++){double sum = 0;for(int j = 1; j <= m; j++){scanf("%lf",&p[i][j]);sum += p[i][j];}for(int j = 1; j <= m; j++)p[i][j] = p[i][j] / sum;}double ans = 0;for(int i = 1; i <= m; i++){double tmp = 0;for(int j = 1; j <= n; j++)tmp += p[j][i];tmp = tmp * tmp;for(int j = 1; j <= n; j++)tmp -= p[j][i] * p[j][i];for(int j = 1; j <= n; j++)tmp += p[j][i];ans += tmp;}printf("%.2f\n",ans);}return 0; }

總結

以上是生活随笔為你收集整理的hdu 5570(数学期望)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。