原題:
題意:
8*8的棋盤,已知兩個馬(走日,無馬腳,每次往各個可行方向走的概率相同)的位置,黑馬先走,吃法同中國象棋,問黑馬贏的概率大還是白馬
解析:
直接暴力每次走完後落在64個格仔上的概率
設:當前由v0→
v1
v_0\to v_1
v0→v1
,v0
v_0v0
有kk
k個方向可以走,當前馬的概率為w
ww,對面馬的概率bbb
那麼顯然此時獲勝的的概率為:w(v
1)∗b
(v1)
w(v_1)*b(v_1)
w(v1)
∗b(v
1)
接下來是難點,怎麼維護w?w?
w?對於任何乙個v
0v_0
v0可以走到的點的概率就直接是1/k
1/k1/
k嗎?實則不然,因為如果上一次對面和落在v
0v_0
v0,也就是說之前我已經贏了,那麼這部分情況是沒有後續的,所以,概率應該是w(v
0)×(
1/k)
×(1−
b(v0
))
w(v_0)\times (1/k)\times(1-b(v_0))
w(v0)
×(1/
k)×(
1−b(
v0)
)
#include
using namespace std;
typedef
double f;
f a[8]
[8],b[8]
[8];
const
double eps =
1e-6
;int di[8]
[2]=
,,,,
,,,}
;f val[8]
[8];
void
init()
val[i]
[j]=
1.0/
(f)co;}}
}int
main()
}}//double s=0;
for(
int i=
0;i<
8;i++)}
//printf("%.5f\n",s);
if(v1-
0.5>eps)
for(
int i=
0;i<
8;i++)}
}for
(int i=
0;i<
8;i++)}
if(v2-
0.5>eps)}if
(!f)
printf
("draw\n");
}
拍手遊戲勝負概率 2014
2014年寫的東西,使用馬爾可夫鏈求簡化的拍手遊戲的勝負概率。我的設想是人機對玩時程式可以 人的動作概率來最大化勝率。ps 其他問題 遊戲介面如何模擬剪刀石頭布的場景,可以讓人們相信對方沒有作弊或非常容易發現對方作弊?原文 我說的拍手遊戲是指這個小時候的遊戲 ab用手勢表示裝彈 防衛和開槍,每拍兩次...
統計勝負結果的SQL語句
統計勝負結果的sql語句,這裡採用子查詢來實現。表結構和資料 date result 2011 02 01 勝 2011 02 01 負 2011 02 01 勝 2011 02 02 勝 2011 02 02 負 採用子查詢 select date,select count from table1...
關於聯合概率 邊際概率 條件概率的區別
一時忘了聯合概率 邊際概率 條件概率是怎麼回事,回頭看看。某離散分布 聯合概率 邊際概率 條件概率的關係 其中,pr x x,y y 為 xy的聯合概率 pr x x 為 x的邊際概率 pr x x y y 為 x基於y的條件概率 pr y y 為 y的邊際概率 從上式子中可以看到 pr x x,y...