UVA12585_Poker End Games

题目是这样的,每个人手中有a和b的钱数,c为a和b中间最小的一个。

每个回合,两个人胜利的概率都是0.5,胜利者从失败者手中获得c的钱数。

如果有一个人手中没钱的话,那么他就failer,游戏结束。

现在给你初始状态问你这次游戏需要进行的回合以及A胜利的期望值分别为多少?

这样的,自己手动模拟几组数据就会发现胜利的概率就是a/(a+b)。

对于回合数,我们可以深搜,但是有的可能有环,所以我们只要设置深搜上线只需要深度为20即可。因为超过20的肯定不会对小数前五位产生影响。

 

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int a,b,n,m,k=0;
double ans1,ans2;

double dfs(int x,int y,int tep)
{
    if (tep>30) return 0;
    if (x==0 || y==0) return 0;
    int cur=min(x,y);
    return 1+0.5*(dfs(x-cur,y+cur,tep+1)+dfs(x+cur,y-cur,tep+1));
}

int main()
{
    scanf("%d",&n);
    m=0;
    while (n--)
    {
        scanf("%d%d",&a,&b);
        ans2=(double)a/(a+b);
        ans1=dfs(a,b,1);
        printf("Case %d: %.6lf %.6lf\n",++m,ans1,ans2);
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/lochan/p/3432365.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值