hdu 4870 Rating 高斯消元 遞推

2021-06-22 21:09:32 字數 1788 閱讀 8262

題意:給定乙個概率p,做一道題有p概率成功,(1-p)概率失敗。成功分數+50,最高1000;失敗分數-100,最低0分。現有兩個賬號,每次選擇分數低的賬號去做題,問其中乙個賬號達到1000分的期望次數。

題解:(1)高斯消元法

得分必須是f(0,0)->f(0,50)->f(50,50)->...->f(950,950)->f(950,1000)。所以所求期望次數就是到乙個賬號到1000的期望次數加上另乙個賬號達到950分的期望次數。記f(i)表示分數i*50到1000分需要的期望次數。那麼答案ans=f(0)*2-f(19)。也就是說兩次都到1000分,然後減去一次950到1000分的期望次數。

我們可以列方程,對於i>=2的數來說,我們記xi=f(i),那麼可以得到方程組xi=p*(x(i+1)+1)+(1-p)*(x(i-2)+1)。其中(0<=i<20,i為0和1時需要特別處理,x20=0)。這樣我們就可以直接套高斯消元法的模板了。

(2)遞推式

思路跟上面差不多,我們將f(0)->f(50)記為g[0],f(50)->f(100)記為g[1]。。。,以此類推。那麼答案ans=∑g[i]*2+g[19](0<=i<=18),先求出g[0]和g[1](列出式子,化解等比數列)。然後發現g[i]和g[i-1]+g[i-2]有關,具體見**和**注釋說明。

**:高斯消元發求解:

#include #include #include #include #include #include #include #include using namespace std;

//高斯消元

const int eps=1e-8;

const int maxn=22;

struct matrixa;

void gauss_jordan(int n)

}int n,d[maxn];

int inf[maxn];

int main()

gauss_jordan(20);

memset(inf,0,sizeof(inf));

for(i=n-1;i>=0;i--)

printf("%.6f\n",a.f[0][20]/a.f[0][0]*2-a.f[19][20]/a.f[19][19]);

}return 0;

}

遞推式求解:

//遞迴公式

#include #include #include #include #include #include #include #include using namespace std;

double f[100],s[100];

int main()

printf("%.6f\n",s[19]-f[19]);

}return 0;}/*

我們可以知道得分過程為f[0][0]->f[0][50]->f[50][50]->...->f[950][1000]

我們發現g[0][0]->g[0][50]和g[0][50]->g[50][50]的期望路長是一樣的,

所以我們只用求g[0]->g[50]->g[100]->...->g[1000],記為f[i]

ans=∑f[i]*2+f[19](0<=i<=18)

我們先求出f[0]和f[1],之後我們發現x到x+50,有兩種情況一種是x+50,

另一種是x-100,x-100到x,期望路長已經求過為f[i-1]+f[i-2],最終得到乙個等比數列,

解得f[i]=(f[i-1]+f[i-2]+1-(f[i-1]+f[i-2])*p)/p;

*/

HDU4870 Rating 高斯消元

有個人有兩個0分賬號,他可以打比賽,他每次用分低的那個賬號打比賽,有p的概率名列前茅,加50分 上限1000分 否則掉100分 下限0分 問有乙個賬號到1000分的期望。先壓縮一下狀態,把50 5050 看作1 11,把100 10010 0看作2 22,把1000 1000 1000 看作20 2...

HDU 4870 Rating 高斯消元法

題意 用兩個賬號去參加一種比賽,初始狀態下兩個賬號都是零分,每次比賽都用分數低的賬號去比賽。有p的概率取勝,相應賬號分數 50分,否則相應賬號分數下降100分,問當有乙個賬號分數達到1000分時參加比賽次數的數學期望是多少。思路 比賽期間以為是一道推公式的題,推了半天沒什麼收穫。賽後想了想。看了解題...

hdu4870 高斯消元

題意 乙個人打比賽 rating 有p的概率 為加50分 有1 p的概率為 x 100分 最大值為 1000 最小值為0 有兩個號 每次拿較小的號來提交 計算最後到達 1000分得期望場數是多少,對每個狀態建立乙個方程然後用高斯消元解決 include include include include...