Bag of mice
题目链接:
http://www.codeforces.com/problemset/problem/148/D
题意:
公主和龙在玩抓老鼠的游戏,在一个包里有一些白色老鼠和一些黑色老鼠,抓到每只老鼠的几率都是相同的,谁先抓到白色老鼠谁就赢,公主先开始抓,老鼠被抓走了就没了,不会回来,当龙抓的时候,除了被抓的老鼠,剩下的老鼠中还会逃走一只,求公主赢的概率。
题解:
一道水题,做法应该有很多......我的做法是设dp[i][j]为第i次抓老鼠,抓完老鼠后逃走了j只白色老鼠的概率
代码
#include<stdio.h>
#include<string.h>
double dp[1400][1001],res=0.0,sum,sumb;
int main()
{
int w,b,t;
scanf("%d%d",&w,&b);
t=(w+b)/3*2;//公主和龙最多共可以抓t次老鼠
if((w+b)%3>=1)t++;
if((w+b)%3==2)t++;
memset(dp,0,sizeof(dp));
dp[0][0]=1.0;
for(int i=1;i<=t;++i)//第i次抓
for(int j=0;j<w&&j<=i/2;++j)//抓完跑了j只老鼠
{
sum=1.0*(w+b-(int)(1.5*(i-1)));//抓之前的老鼠数
if(i%2)dp[i][j]=dp[i-1][j]*(sum-w+j)/sum,res+=dp[i-1][j]*(w-j)/sum;//公主抓的时候
else//龙抓的时候
{
dp[i][j]=dp[i-1][j]*(sum-w+j)/sum*(sum-w+j-1)/(sum-1);
if(j)dp[i][j]+=dp[i-1][j-1]*((sum-w+j-1)/sum*(w-j+1)/(sum-1));
}
}
printf("%.9f
",res);
}