HDU 1204 糖果大戰 Markov過程

2022-05-28 12:33:07 字數 1336 閱讀 9622

題意:

生日party結束的那天晚上,剩下了一些糖果,gandon想把所有的都統統拿走,speakless於是說:「可以是可以,不過我們來玩24點,你不是已經拿到了一些糖果了嗎?這樣,如果誰贏一局,就拿走對方一顆糖,直到拿完對方所有的糖為止。」如果誰能算出來而對方算不出來,誰就贏,但是如果雙方都能算出或者都不能,就算平局,不會有任何糖果的得失。 

speakless是個喜歡提前想問題的人,既然他發起了這場糖果大戰,就自然很想贏啦(不然可就要精光了-_-)。現在他需要你的幫忙,給你他每局贏的概率和gardon每局贏的概率,請你給出他可能獲得這場大戰勝利的概率。

分析:markov過程(馬爾科夫過程)。

f[i]表示手上有i個糖果時,最終要贏得n個糖果的概率。要達到他有三種情況,

1. 贏得乙個糖果, 概率是p(1-q), 這是下乙個時刻t+1 g就有了i+1個糖果.

2. 輸掉比賽, 在下乙個時刻變成了i-1個糖果, 概率是q(1-p).

3. 打成平手, 下乙個時刻還有i個糖果, 概率是1-p(1-q)-q(1-p).

得到如下公式:

fi=p(1-q)*fi+1+q(1-p)*fi-1+(1-p(1-q)-q(1-p))*fi

等比數列化簡:

fn=(1+k+k2+...+kn-1)/(1+k+k2+...+km+n-1)  其中k=q*(1-p)/p*(1-q)

特殊情況為q=1,這個時候是等差數列。

#include #include 

intmain()

if (m==0

)

a = q*(1-p);

b = p*(1-q);

s = a/b;

double c1=1

;

double en=1

;

if (a==b)

for (i=1; i<=n+m; i++)

c1 *=s;

c1 = (1-s)/(1-c1);

for (i=1; i<=n; i++)

en *=s;

en = (1-en)*c1/(1-s);

printf(

"%.2lf\n

",en);

}return0;

}

HDU 1204 基礎DP 非連續欄位的最大和

其實這個感覺是一眼題,只不過我真心太菜了。題目已經告訴你了,有m段,n個數字,那麼我們就只需要dp m n 即可,然後最後的答案肯定是dp m 的那一行,所以其他行都是沒有用的,因為我們可以把dp m n 變成dp 2 n 即可。然後轉移方程式dp i j max dp i j 1 max dp i...

1204 糖果大戰

problem description 生日party結束的那天晚上,剩下了一些糖果,gandon想把所有的都統統拿走,speakless於是說 可以是可以,不過我們來玩24點,你不是已經拿到了一些糖果了嗎?這樣,如果誰贏一局,就拿走對方一顆糖,直到拿完對方所有的糖為止。如果誰能算出來而對方算不出來...

杭電1204 糖果大戰

生日party結束的那天晚上,剩下了一些糖果,gandon想把所有的都統統拿走,speakless於是說 可以是可以,不過我們來玩24點,你不是已經拿到了一些糖果了嗎?這樣,如果誰贏一局,就拿走對方一顆糖,直到拿完對方所有的糖為止。如果誰能算出來而對方算不出來,誰就贏,但是如果雙方都能算出或者都不能...