白老鼠

CF148D Bag of mice

元气小坏坏 提交于 2020-02-16 14:32:52
题意: 有a只白老鼠,b只黑老鼠,A先抓,B后抓,只要有一个人先抓住老鼠,游戏就结束了。每次当B抓住一只老鼠且游戏还没结束时,就睡会逃出一只老鼠。问A抓住老鼠的期望值为多少。(如果都没抓住,A不算赢) 思路: 设f[a][b]为还剩a只白老鼠,b只黑老鼠时的期望,设定此时的含义是在A先抓,B后抓的条件下成立。 给出两个边界条件: 1.f[0][i]=0 2.f[i][0]=1 对于f[i][j]来说,f[i][j]=f[i-2][j-1]+f[i][j-3]+此时A直接抓到白老鼠的概率。 # include <bits/stdc++.h> using namespace std ; const int N = 1e3 + 5 ; int a , b ; double inf , f [ N ] [ N ] ; double dfs ( int aa , int bb ) { if ( f [ aa ] [ bb ] != inf ) return f [ aa ] [ bb ] ; if ( ! aa ) { f [ aa ] [ bb ] = 0 ; return 0 ; } if ( ! bb ) { f [ aa ] [ bb ] = 1 ; return 1 ; } double ans = 0 ; double a = double ( aa ) ; double b =