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);
        }
    }
  • 相关阅读:
    2019 上海网络赛 J stone name (01背包)
    CodeForces
    2019 年百度之星·程序设计大赛
    CodeForces
    POJ 3728 The merchant (树形DP+LCA)
    HihoCoder
    HihoCoder 1055 刷油漆 (树上背包)
    HI3518E平台ISP调试环境搭建
    有用的调节
    【HI3520DV200】sample
  • 原文地址:https://www.cnblogs.com/tun117/p/5061846.html
Copyright © 2011-2022 走看看