HDU 4438 Hunters

来源:互联网 发布:mysql时间转日期函数 编辑:程序博客网 时间:2024/05/16 16:13

题意:A和B比赛打猎,有老虎和狼两种猎物,如果A和B首先选择打的是不同的猎物,那么A和B都可以把他们选择的猎物打死,如果A和B首先选择打的是同一种猎物,那么A打死猎物的可能性是p,B打死猎物的可能性是1-p,打死一只猎物后,他们会选择去打另一种猎物,同样A打死猎物的可能性是p,B打死猎物的可能性是1-p,打死老虎得x分,打死狼得y分,现在A知道B首次选择打老虎的概率是q,首次选择打狼的概率是1-q,要使A的得分最高,求A首次选择打的猎物以及A的得分

解题思路:求期望.若A首先选择老虎,接下来就有两种情况,一种是B也选择老虎,此时A得x分的概率是p*(1-p),得y分的概率是(1-p)*p,得(x+y)分的概率是p*p,得0分的概率是(1-p)*(1-p),另一种是B选择狼,那么A只能得x分,也就是说A得x分的概率是1,这种情况的期望ans1=(x*p*(1-p)+y*(1-p)*p+(x+y)*p*p)*q+x*(1-q),若A首先选择狼,同理也有两种情况,一种是B也选择狼,此时A得x分的概率是(1-p)*p,得y分的概率是p*(1-p),得(x+y)分的概率是p*p,得0分的概率是(1-p)*(1-p),另一种是B选择老虎,那么A只能得y分,也就是说A得y分的概率是1,这种情况的期望是ans2=(x*p*(1-p)+y*(1-p)*p+(x+y)*p*p)*(1-q)+y*q,判断两种情况哪种期望值大选哪种即可

代码:

#include <iostream>#include <algorithm>#include <cstring>#include <string>#include <cmath>#include <cstdio>using namespace std;int main(){    int t;    scanf("%d",&t);    while(t--)    {        double x,y,p,q;        scanf("%lf%lf%lf%lf",&x,&y,&p,&q);        double ans1=(x*p*(1-p)+y*(1-p)*p+(x+y)*p*p)*q+x*(1-q);        double ans2=(x*p*(1-p)+y*(1-p)*p+(x+y)*p*p)*(1-q)+y*q;        if(ans1>ans2)printf("tiger %.4lf\n",ans1);        else printf("wolf %.4lf\n",ans2);    }    return 0;}


原创粉丝点击