• HDU 4405 Aeroplane chess(概率dp,数学期望)


    题目

    http://kicd.blog.163.com/blog/static/126961911200910168335852/

    根据里面的例子,就可以很简单的写出来了,虽然我现在还是不是很理解为什么“是下一分钟,故要加上1.”?

    好吧,先写着,有事没事想一想,也许时间长了就明白了。

    别的人解释很棒:(虽然我还没全懂)


    //e[i]表示i的位置走到n所需要的期望步数
    //那么e[i]怎么求,首先e[i]走到e[i+1]的概率为1/6 ,
    //而e[i+1]是走到终点的期望步数,所以e[i]=e[i+1]*1/6+1,
    //为什么加一呢,因为你向前走了一步,期望表示的是步数
    //以此类推 e[i]=1+e[i+1]*1/6+e[i+2]*1/6+e[i+3]*1/6...+e[i+6]*1/6

    //CF 417
    
    //e[i]表示i的位置走到n所需要的期望步数
    //那么e[i]怎么求,首先e[i]走到e[i+1]的概率为1/6 ,
    //而e[i+1]是走到终点的期望步数,所以e[i]=e[i+1]*1/6+1,
    //为什么加一呢,因为你向前走了一步,期望表示的是步数
    //以此类推 e[i]=1+e[i+1]*1/6+e[i+2]*1/6+e[i+3]*1/6...+e[i+6]*1/6
    
    
    #include <stdio.h>
    #include <string.h>
    #include<algorithm>
    #include<string>
    using namespace std;
    int mp[100010];
    double e[100010];
    int main()
    {
        
        int n,m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            if(n==0&&m==0)break;
            memset(mp,0,sizeof(mp));
            for(int i=0;i<m;i++)
            {
                int x,y;
                scanf("%d%d",&x,&y);
                mp[x]=y;
            }
            memset(e,0,sizeof(e));
            for(int i=n-1;i>=0;i--)//因为e[n]=0,所以不用再处理它了
            {
                if(mp[i])e[i]=e[mp[i]];
                else
                {
                    for(int j=1;j<=6;j++)
                        e[i]+=(1.0/6.0*e[i+j]);
                    e[i]+=1.0;
                }
            }
            printf("%.4lf
    ",e[0]);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    LeetCode Reverse Nodes in k-Group
    LeetCode Unique Binary Search Trees II
    Binary Tree Zigzag Level Order Traversal
    JavaWeb--JSP
    Java--面向对象
    javaScript-进阶篇(三)
    javaScript-进阶篇(二)
    java--常用类
    javaScript-进阶篇(一)
    Java--数组
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3959879.html
Copyright © 2020-2023  润新知