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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

游戏(期望)

發(fā)布時(shí)間:2025/7/14 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 游戏(期望) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


這是一個(gè)期望的題目,有兩種做法。
一種是比較好想的高斯消元,另一種是思維難度稍微大了一些的數(shù)學(xué)做法,但是代碼很短,時(shí)間復(fù)雜度也更優(yōu)秀。
(高斯消元做法)

#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int read() {int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f; } #define N 210 int n,m; double a[N][N],p; void gauss() {for (int i=0;i<n+m+1;i++){int mx=i;for (int j=i+1;j<=n+m+1;j++)if (fabs(a[j][i])>fabs(a[mx][i])) mx=j;if (i!=mx) swap(a[i],a[mx]);for (int j=i+1;j<=n+m+1;j++){double t=a[j][i]/a[i][i];for (int k=i;k<=n+m+2;k++)a[j][k]-=t*a[i][k];}} } int main() {n=read(),m=read();cin>>p;a[0][0]=p;a[0][1]=1-p;a[0][0]--;a[0][n+m+2]--;for (int i=1;i<n+m;i++)a[i][i-1]=p,a[i][i+1]=1-p,a[i][i]--,a[i][n+m+2]--;a[n+m][n+m]=1-p;a[n+m][n+m-1]=p;a[n+m][n+m]--,a[n+m][n+m+2]--;a[n][n-1]=a[n][n+1]=a[n][n+m+2]=0;a[n+m+1][n-1]=p,a[n+m+1][n+1]=1-p,a[n+m+1][n+m+1]--,a[n+m+1][n+m+2]--;gauss();printf("%.7lf",a[n+m+1][n+m+2]/a[n+m+1][n+m+1]);return 0; }

以前沒(méi)有怎么做過(guò)期望的題目,更是沒(méi)有想到可以用高斯消元來(lái)做期望的題目。

但是現(xiàn)在發(fā)現(xiàn)其實(shí)這是個(gè)挺常見(jiàn)的套路,所以就學(xué)習(xí)了一下qwq

有興趣的話可以去做一下HNOI2013游走,這個(gè)也是高斯消元來(lái)求解未知數(shù)的期望類型題目。

(數(shù)學(xué)做法)

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define MAXN 110 using namespace std; long double sum[MAXN],p,ans=1.0; int n,m; int main() {cin>>n>>m;cin>>p;sum[0]=1.0;for(int i=1;i<=n+m;i++)sum[i]=sum[i-1]*(1-p)/p,ans+=sum[i];printf("%.8Lf",(1/(sum[n]/ans)));return 0; }

其實(shí)這個(gè)題有類似的題目收集郵票有興趣的話可以嘗試一下,思路很相近。

這個(gè)做法就比較玄妙了。

我們可以這樣想:

我們把狀態(tài)進(jìn)行分離,因?yàn)锳lice和Bob的寶石總和不變,所以我們只考慮Alice的個(gè)數(shù),我們將狀態(tài)抽離出來(lái)為她擁有0~n+m這n+m+1種狀態(tài),我們要計(jì)算這些狀態(tài)在總體上的期望出現(xiàn)次數(shù)。而這些狀態(tài)之間每次都會(huì)有概率加成的轉(zhuǎn)移。

因?yàn)橛螒驎?huì)進(jìn)行無(wú)限輪(也就是無(wú)窮大),這樣的話開(kāi)始幾次的情況其實(shí)對(duì)整體的影響很小很小。而在進(jìn)行了無(wú)窮多的傳遞后,各個(gè)狀態(tài)出現(xiàn)的期望出現(xiàn)次數(shù)應(yīng)該是達(dá)到了穩(wěn)定值(當(dāng)然這其中肯定是每輪之間是有變化的,但是要理解的一點(diǎn)是,我們將狀態(tài)轉(zhuǎn)移進(jìn)行了無(wú)窮多輪,所以我們要從整體上來(lái)看,那么均攤到每個(gè)狀態(tài)的概率肯定是穩(wěn)定的、恒定的)

既然每種狀態(tài)的概率是穩(wěn)定的,那么我們考慮每次狀態(tài)的轉(zhuǎn)移。考慮狀態(tài)\(A_k\)和它的上一個(gè)狀態(tài)\(A_{k-1}\)\(A\)每次有p的概率轉(zhuǎn)移到上一個(gè)狀態(tài),它的上一個(gè)狀態(tài)有1-p的概率轉(zhuǎn)移到它。但是要維持在總體上他們的穩(wěn)定,那么就有\(A_k\times p=A_{k-1}\times (1-p)\),這樣的話我們可以知道這些狀態(tài)的分布呈公比為\(\frac{1-p}{p}\)的等比數(shù)列。那么我們假設(shè)開(kāi)始的0狀態(tài)為單位1,就可以進(jìn)行遞推了。

隨后我們可以用\(A_n\)狀態(tài)來(lái)除以總數(shù),算出在這些狀態(tài)中(如果把總和看作單位1的話),n狀態(tài)出現(xiàn)的次數(shù)(比1小)。最后我們將整個(gè)游戲的無(wú)數(shù)個(gè)回合具象成一條直線。那么n狀態(tài)就是上面的一些間隔的點(diǎn)。我們要求的問(wèn)題也可以轉(zhuǎn)化成相鄰兩個(gè)n狀態(tài)出現(xiàn)的間隔。那么就用1來(lái)除以它就可以了。

轉(zhuǎn)載于:https://www.cnblogs.com/fengxunling/p/9763816.html

總結(jié)

以上是生活随笔為你收集整理的游戏(期望)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。