題意:
生日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 #includeintmain()
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點,你不是已經拿到了一些糖果了嗎?這樣,如果誰贏一局,就拿走對方一顆糖,直到拿完對方所有的糖為止。如果誰能算出來而對方算不出來,誰就贏,但是如果雙方都能算出或者都不能...