A Dangerous Maze(概率与期望(求时间的期望))

【题目来源】:https://cn.vjudge.net/problem/LightOJ-1027
【题意】
处在一个迷宫里,面前有n扇门,每一扇都可能带离你走出迷宫,若能带离,那么会花费一个时间值,表示为正值, 若不能带离,那就是返回到初始的位置,也会花费一个时间,表示为负值,问,若是能够走出迷宫,需要花费时间的期望值。
【思路】
这是我做的第一道概率与期望题,起初感觉并不是多好理解,但是也要坚持。翻了二十多篇博客,先把两篇比较好的进行分享:
http://blog.csdn.net/chenzhenyu123456/article/details/47720573
http://blog.csdn.net/catglory/article/details/50757654
假设能走出去的时间期望值为E。
每一步有两种选择:
1.当前部可以出去:
期望为:1/n*t
2.当前部不可以出去,回到原点,然后再加上出去的期望:
期望为:1/n*t+1/n*E
设所有可以将你传送出去的门的时间值 总和为sum1,所有可以将你传送回去的门的时间值 总和为sum2。
设所有可以将你传送出去的门的数目为door1,所有可以将你传送回去的门的数目为door2。
得:
E=1/n*sum1+1/n*(sum2+door2*E)
化简得:
E = (sum1 + sum2) / (n-door2)。
当然,n-door2==0无解,输出inf。
【代码】

#include
using namespace std;
int gcd(int a,int b)
{
    if(b==0)
        return a;
    else
        return a=gcd(b,a%b);
}
int main()
{
    int T,t=1;
    cin>>T;
    while(T--)
    {
        int n;
        cin>>n;
        int sum1=0;
        int sum2=0;
        int x;
        int door=0;
        for(int i=0;icin>>x;
            if(x<0)
            {
                sum2+=(-x);
                door++;
            }
            else
                sum1+=x;
        }
        if(n-door==0)
        {
            cout<<"Case "<": inf"<else
        {

            int a=n-door;
            int b=sum1+sum2;
//            cout<
            int res=gcd(a,b);
            cout<<"Case "<": "<"/"<

你可能感兴趣的:(ACM竞赛,【数论】--概率与期望,ACM的进程)