您的位置:首页 > 其它

CF 148D Bag of mice 概率DP

2015-08-04 14:01 302 查看
刚开始总感觉dp用一维就可以了,dp[i]表示第i局公主获胜的概率,然后卡在了逃出的是白鼠黑鼠的判断上,两种状态需要分开讨论,但是在概率上又会同时对后续结果有影响,与此同时 这两种情况又是不共存的,所以考虑二维数组,如果i表示第几局的话,dp[i][j]中j打死我也想不到有价值的表示意义。所以我肯定刚开始的思路都是错误的。。。

换思路,=.= 想不通, 好吧看题解。。。。。。。。。。。。。-.-|| 我偏了 。 很偏的那种。。。

下面介绍前辈的做法:dp[i][j]表示白鼠黑鼠数量分别为i,j 时公主获胜的概率,状态转换呼之欲出。。。=.=

#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
double dp[1002][1002];
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF){
int i,j;
memset(dp,0,sizeof(dp));
for(i=1;i<=a;i++) dp[i][0]=1;
for(i=1;i<=a;i++)
for(j=1;j<=b;j++){
dp[i][j]+=(double)i/(i+j);
if(j>=3) dp[i][j]+=((double)j/(i+j))*((double)(j-1)/(i+j-1))*((double)(j-2)/(i+j-2))*dp[i][j-3];
if(j>=2) dp[i][j]+=((double)j/(i+j))*((double)(j-1)/(i+j-1))*((double)i/(i+j-2))*dp[i-1][j-2];
}
printf("%.9lf\n",dp[a][b]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: