zoukankan      html  css  js  c++  java
  • LightOJ

    题意:n个格子,每次走1-6步(等概率),走过的格子加上价值,如果走的步数超过n,重选,走到n结束,求价值的期望

    题解:概率dp,dp[i]表示第i位走过的概率,只有前6个格子能转移到当前格子,转移到当前格子的概率是1/6(如果后面有6个及以上的格子),否则是1/剩余的格子数,最后用每一位的概率*价值就是期望了

    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define mp make_pair
    #define pb push_back
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define C 0.5772156649
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #define pii pair<int,int>
    
    using namespace std;
    
    const double g=10.0,eps=1e-12;
    const int N=200+10,maxn=200000+10,inf=0x3f3f3f3f;
    
    double dp[N],a[N];
    int main()
    {
        int res=0,t;
        scanf("%d",&t);
        while(t--)
        {
            int n;
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
            {
                scanf("%lf",&a[i]);
                dp[i]=0.0;
            }
            dp[1]=1;
            for(int i=2;i<=n;i++)
            {
                for(int j=max(1,i-6);j<i;j++)
                {
                    if(n-j>=6)dp[i]+=dp[j]*1.0/6.0;
                    else if(n-j>=1)dp[i]+=dp[j]*1.0/(n-j);
                }
            }
          /*  for(int i=1;i<=n;i++)
                printf("%.10f
    ",dp[i]);*/
            double ans=0;
            for(int i=1;i<=n;i++)
                ans+=dp[i]*a[i];
            printf("Case %d: %.10f
    ",++res,ans);
        }
        return 0;
    }
    /********************
    
    ********************/
    View Code
  • 相关阅读:
    动态添加LInk的分析
    ASP.NET内置对象-网页转向的4中方法
    网页生命周期-动态添加控件
    网页生命周期-控件事件执行顺序
    网页生命周期-PageLoad事件
    HyperLink 控件
    ListBox控件
    OptionMenu选项菜单
    Menubutton按钮弹出菜单
    Menu-右键弹出菜单
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/7992159.html
Copyright © 2011-2022 走看看