zoukankan      html  css  js  c++  java
  • HDU 4405 【概率dp】

    题意:

    飞行棋,从0出发要求到n或者大于n的步数的期望。每一步可以投一下筛子,前进相应的步数,筛子是常见的6面筛子。

    但是有些地方可以从a飞到大于a的b,并且保证每个a只能对应一个b,而且可以连续飞,例如a到b,b到c,则可以直接从a到c。

    思路:

    先用并查集将小的编号并入编号大的集合,然后就是常见的概率DP的模式。

    错误:

    并查集的数组初始化的时候应该初始化n+6,不能直接初始化成n。

    从n-1进行状态的求解,因为n的时候也是0.

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int me[100100];
    double dp[100100];
    void init(int n)
    {
        for(int i=0;i<=n+50;i++)
        {
            me[i]=i;
        }
        memset(dp,0,sizeof(dp));
    }
    int findme(int a)
    {
        if(a!=me[a])
            return me[a]=findme(me[a]);
        return a;
    }
    int main()
    {
        int n,m;
        scanf("%d%d",&n,&m);
        while(n||m)
        {
            init(n);
            for(int i=1;i<=m;i++)
            {
                int a,b,aa,bb;
                scanf("%d%d",&a,&b);
                aa=findme(a);
                bb=findme(b);
                me[aa]=bb;
            }
            for(int i=n-1;i>=0;i--)
            {
                for(int j=1;j<=6;j++)
                {
                    dp[i]+=dp[findme(i+j)]/6;
                }
                dp[i]+=1;
            }
            printf("%.4lf
    ",dp[0]);
            scanf("%d%d",&n,&m);
        }
    }
  • 相关阅读:
    python之路之模块
    python之路xml模块补充
    python之路模块补充
    python之路模块简介及模块导入
    python之路正则补充模块
    python之路模块
    [Unity算法]A星寻路(一):基础版本
    [Unity基础]RenderTexture
    [Lua]位运算
    [Unity插件]AI行为树使用总结
  • 原文地址:https://www.cnblogs.com/tun117/p/5061846.html
Copyright © 2011-2022 走看看