借助树的概率dp(期望)+数学-好题-hdu-4035-Maze

acm中dp问题简单入门讲解 立即下载

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4035

题目意思:

有n个房间,有n-1条通道连接这n个房间(每两个房间之间有且只有一条路,所以实际上就是一棵树),在每个房间中,有三种选择要么被杀则回到第一个房间,概率为ki,要么从出口逃离概率为ei,要么通过通道到达其他的房间。

解题思路:

好题。

状态转移方程很好想,但是求的时候有技巧,不能直接用高斯消元来求(n有10000)肯定会超时。发现知,此题是在一棵树上转移,所以可以借助树的特点,分成两部分儿子和父亲,抽象出系数,然后从叶子节点向上求出父亲节点。

以下文字选自http://blog.youkuaiyun.com/morgan_xww/article/details/6776947

设 E[i]表示在结点i处,要走出迷宫所要走的边数的期望。E[1]即为所求。
    
    叶子结点:
    E[i] = ki*E[1] + ei*0 + (1-ki-ei)*(E[father[i]] + 1);
         = ki*E[1] + (1-ki-ei)*E[father[i]] + (1-ki-ei);
    
    非叶子结点:(m为与结点相连的边数)
    E[i] = ki*E[1] + ei*0 + (1-ki-ei)/m*( E[father[i]]+1 + ∑( E[child[i]]+1 ) );
         = ki*E[1] + (1-ki-ei)/m*E[father[i]] + (1-ki-ei)/m*∑(E[child[i]]) + (1-ki-ei);
    
    设对每个结点:E[i] = Ai*E[1] + Bi*E[father[i]] + Ci;
    
    对于非叶子结点i,设j为i的孩子结点,则
    ∑(E[child[i]]) = ∑E[j]
                   = ∑(Aj*E[1] + Bj*E[father[j]] + Cj)
                   = ∑(Aj*E[1] + Bj*E[i] + Cj)
    带入上面的式子得
    (1 - (1-ki-ei)/m*∑Bj)*E[i] = (ki+(1-ki-ei)/m*∑Aj)*E[1] + (1-ki-ei)/m*E[father[i]] + (1-ki-ei) + (1-ki-ei)/m*∑Cj;
    由此可得
    Ai =        (ki+(1-ki-ei)/m*∑Aj)   / (1 - (1-ki-ei)/m*∑Bj);
    Bi =        (1-ki-ei)/m            / (1 - (1-ki-ei)/m*∑Bj);
    Ci = ( (1-ki-ei)+(1-ki-ei)/m*∑Cj ) / (1 - (1-ki-ei)/m*∑Bj);
    
    对于叶子结点
    Ai = ki;
    Bi = 1 - ki - ei;
    Ci = 1 - ki - ei;
    
    从叶子结点开始,直到算出 A1,B1,C1;
    
    E[1] = A1*E[1] + B1*0 + C1;
    所以
    E[1] = C1 / (1 - A1);
    若 A1趋近于1则无解...

代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#define eps 1e-9
#define INF 0x3fffffff
#define PI acos(-1.0)
#define ll __int64
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;

#define Maxn 10100

int deg[Maxn],cnt,n;
double A[Maxn],B[Maxn],C[Maxn]; //分别表示系数
double k[Maxn],e[Maxn];//表示被杀和逃离概率

struct Edge
{
    int v;
    struct Edge * next;
}edge[Maxn<<1],*head[Maxn<<1];

void add(int a,int b)
{
    ++cnt;
    deg[a]++; //度数
    edge[cnt].v=b,edge[cnt].next=head[a];
    head[a]=&edge[cnt];
}
void dfs(int cur,int pre)
{
    struct Edge * p=head[cur];
    bool flag=true;
    double suma=0,sumb=0,sumc=0;

    while(p)
    {
        int v=p->v;
        if(v!=pre)
        {
            flag=false;  //不是叶子节点
            dfs(v,cur);suma+=A[v];sumb+=B[v];sumc+=C[v];
        } //求出儿子节点的各和
        p=p->next;
    }
    if(flag) //叶子节点
    {
        double t=1-k[cur]-e[cur];
        A[cur]=k[cur],B[cur]=t,C[cur]=t;
        return ;
    }//非叶子节点
    double temp=(1-k[cur]-e[cur])/deg[cur];
    double tt=1-temp*sumb;

    A[cur]=(k[cur]+temp*suma)/tt;
    B[cur]=temp/tt;
    C[cur]=(temp*sumc+(1-k[cur]-e[cur]))/tt;
    return ;
}

int main()
{
    int t;

    scanf("%d",&t);
    for(int ca=1;ca<=t;ca++)
    {
        scanf("%d",&n);
        memset(head,NULL,sizeof(head));
        memset(deg,0,sizeof(deg));
        cnt=0;

        for(int i=1;i<n;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            add(a,b),add(b,a);
        }
        for(int i=1;i<=n;i++)
        {
            double a,b;
            scanf("%lf%lf",&a,&b);
            k[i]=a/100.0,e[i]=b/100.0;
        }
        dfs(1,-1);
        printf("Case %d: ",ca);
        if(fabs(1-A[1])<eps) //这里卡精度
            printf("impossible\n");
        else
            printf("%.5f\n",C[1]/(1.0-A[1]));
    }
   return 0;
}





AVS3代码阅读HPM4.0 参考AVS3代码阅读(HPM6.0)(一.整体架构以及CU划分部分代码) 版本:HPM4.0 核心文件:app_encoder.c   要做的是帧间预测,所以前面的函数先暂时不管了,挖个坑以后再填。直接从enc_pic看起。 enc_pic()    ... 阅读详情

相关推荐

史上最全的Logisim运算器实验教程(基于华中科技大学计算机组成原理实验)

本博客是实现了Logisim的运算器设计,有具体的运算器设计的思路和运算器设计的电路,适合一步一步的按照思路做。

qq_62325622的博客 4万+

关于leetcode刷题详细介绍

  虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会。现在提供在线编程评测的平台有很多,比较有名的有 hihocoder,LintCode,以及这里我们关注的 LeetCode。 LeetCode收录了许多互联网公司的算法题目,被称为刷题神器,我虽然早有耳闻,不过却一直没有上面玩过。   据了解,LeetCode 是一个非常棒的 OJ(Online J...

智者之家 9万+

手把手教你搞定CAC会议投稿:从LaTeX模板到PDF eXpress避坑全流程

本文详细解析CAC会议投稿全流程,重点介绍LaTeX模板调整、Turnitin查重技巧及PDF eXpress校验避坑指南。通过实战案例和代码示例,帮助研究者高效完成IEEE格式论文投稿,避免常见技术性失误,提升投稿成功率。

weixin_29969209的博客 397

LeetCode算法题整理(200题左右)

Leetcode

qq_38253797的博客 1万+

内网CentOS离线部署LibreOffice:从依赖缺失到服务启动的完整避坑指南

本文详细介绍了在CentOS内网环境中离线部署LibreOffice的完整流程,包括依赖包准备、安装顺序优化及常见报错解决方案。针对金融等封闭网络场景,提供从rpm包选择到服务启动的全套避坑指南,特别解决libXinerama等图形库缺失问题,确保文档转换服务稳定运行。

weixin_33416697的博客 246

AIAgent知识表示与推理:基于本体论与规则引擎的实现

AIAgent知识表示与推理:基于本体论与规则引擎的实现 1. 背景介绍 人工智能(AI)系统的核心是知识表示和推理,这是实现智能行为的基础。在过去的几十年里,人工智能领域一直致力于研究如何有效地表示和推理知识,以支持智能系统的决策和行为。其中,基于本体论的知识表示和

AI天才研究院 1495

Leetcode各种题型题目+思路+代码(共176道题及答案)

文章目录 第一章:Leetcode 每日很多题 1、Leetcode-1047 删除字符串中的所有相邻重复项 2、剑指 Offer 53 - I. 在排序数组中查找数字 I 3、Leetcode704:二分查找 4、 Leetcode 227:基本计算器II 5、leetcode 224:基本计算器(带括号的计算) 6、Leetcode 15:三数之和:排序+双指针 7、剑指 offer 38.字符串的排列 8、Leetcode409:最长回文串 9、Leetcode 331:验证二叉树的前序序列化 10、

muli522的博客 4万+

数字IC设计实现之hierarchical flow系列(一)

数字IC设计实现之hierarchical flow系列(一) 最近这段时间小编又比较忙起来了,今天抽空来咖啡厅码字来了,刚到时脑子一片空白,不知道要分享些什么(项目结束后将会在知识星球上分享数字 IC 设计实现 Tapeout 前要review的那些 checklist)。突然间想起来有个星友希望小编分享些数字 IC 设计实现 hierarchical flow 的相关内容。考虑到现在大都采用这种方式来做 design 和实现,那就选这个 topic 了。限于篇幅和时间限制,今天只分享逻辑综合部分和布局布

weixin_37584728的博客 6000

leetcode算法与代码总结

leetcode代码总结1.动态规划问题动态规划思想介绍1. 1.动态规划问题 动态规划思想介绍 1.

一只在cv道路上爬行的小乌龟~ 4180

BrepNet实战:5分钟搞定三维CAD模型的加工特征识别(附Python代码)

本文详细介绍了BrepNet在三维CAD模型加工特征识别中的实战应用,通过Python代码演示了从环境搭建到模型训练的全流程。BrepNet基于边界表示(BRep)的深度学习框架,能够高效识别加工特征,显著提升工业设计和智能制造领域的效率。文章还提供了性能优化和部署建议,帮助开发者快速实现AI驱动的几何特征识别。

weixin_29044713的博客 510

LinuxCNC开发实战:从安装到EtherCAT配置全解析

本文详细解析LinuxCNC开发实战,从系统安装到EtherCAT总线配置全流程。涵盖实时内核优化、伺服驱动器PDO映射、HAL配置及自定义运动学开发,帮助开发者快速搭建工业级数控系统,提升运动控制精度与稳定性。

rgv234567的博客 353

LeetCode的基础入门(非常详细)零基础入门到精通,收藏这一篇就够了

关于LeetCode都需要了解哪些?Python语法reduce(lambda x,y:x * y,ns) # 数组之乘积 (ns[0] * ns[1]) * ns[2]reduce(lambda x,y:x + y,ns) # 数组之和# 记忆化搜索# 大根堆# 过滤函数# 除数# 不可变str 常见函数strip([chars]) # 去除首末两端的字符, 默认是 \r,\n," "replace(old, new[, count]) # 字符串替换, old to new。

Libra1313的博客 4743

vue3:实现飞书扫码授权登录流程+完整示例源码,用户使用飞书移动端扫描飞书登录二维码进行登录后获取用户信息数据,vue3接入飞书登录系统,支持新跳页显示二维码或div容器里内嵌登录二维码(详细代码)

vue3飞书扫码登录网页,vue3飞书扫码登录网页,vue3接入飞书扫码登录全流程,Vue3在网页中接入飞书二维码SDK,vue3飞书扫码登录网页,实现用户授权登录的流程,Vue3集成飞书前端JSSDK,对接飞书扫码授权,飞书扫码授权,vue3网站集成飞书登录生成二维码,VUE3用户扫码飞书授权登录,飞书开发-网页应用JSSDK鉴权流程,飞书开放平台自建网页应用登录与免登录,vue3接入二维码SDK将飞书登录的二维码嵌入到网页中,pc后台管理系统接入飞书登录,vue3项目中实现扫码登录飞书,Vue飞书免登录

✅ 精选推荐文章 4392

hdu 4035 maze 题解(期望,树形DP)

原题链接: hdu 题意简述 lxhgwwlxhgwwlxhgww在一个树上,初始在根,即111号节点。有三种情况: eie_iei​概率 直接胜利 (李胜利:叫我干嘛) kik_iki​概率 回到根 否则等概率选择一个点(珂能是父亲,也珂能是儿子),继续 求胜利的期望步数。 数据 输入 多组数据。先是一个TTT,表示T(T&lt;=30)T(T&lt;=30)T(T<=...

LightningUZ的博客 442

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

hdu 4035 Maze (树上的概率dp)

Maze Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submission(s): 1672    Accepted Submission(s): 635 Special Judge Problem Description When

To be what you what to be! 1189

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

动态规划练习题:概率DP总结,求解数学期望或概率的题目

来源:http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710606.html 概率DP主要用于求解期望、概率等题目。 转移方程有时候比较灵活。 一般求概率是正推,求期望是逆推。通过题目可以体会到这点。   首先先推荐几篇参考的论文: 《信息学竞赛中概率问题求解初探》 《浅析竞赛中一类数学期望问题的解决方法》 《有关

NOI2015的专栏 2256

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Hdu 4035 Maze (dp求期望) - 2011 ACM/ICPC 成都赛区网络预选赛 1005

比赛时看题了,但是没有思路。比赛结束后这题总共通过20+,赛后看这个解题报告,由于博主说得太简洁,而我又是从来没有见过这种dp求数学期望的题,所以研究了好久都木有明白。只有搜索一下【dp求期望】的题目,从简单的开始入手,费了老大功夫,终于搞懂了,于是写下详细解题报告。 如果感觉

小威的专栏 8984

【概率与期望】hdu 4035 Maze

通道:http://acm.hdu.edu.cn/showproblem.php?pid=4035 题意:有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树,从结点1出发,开始走,在每个结点i都有3种可能:   1.被杀死,回到结点1处(概率为ki)   2.找到出口,走出迷宫 (概率为ei)   3.和该点相连有m条边,随机走一条  求走出迷宫所要走的边数的...

124

HDU 4035 Maze (概率DP & 期望)

Maze Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65768/65768 K (Java/Others)Total Submission(s): 1055Accepted Submission(s): 347Special Judge Problem Description When wake up, ...

anvt77205的博客 161

HDU 4035 Maze

非常nice的一个概率dp,此题要求的是走出去的步数的期望,首先我们要把问题转化为从任意点出发,到 1 点需要步数期望。于是问题就转化为到 1 点的步数的期望了。然后我们就可以得到每一个点的期望公式: E[i] = ki*E[1] + (1-ki-ei)/m*( E[father[i]]+1 + ∑( E[child[i]]+1 ) ) = ki*E[1] + (1-ki-ei)/m*E[fat

ok_again的专栏 1137

HDU 4035 Maze (很好的概率DP)

做了有些概率和期望的题目了,现在觉得大致有那么两种办法。【说白了还是要靠数学 一、直接利用组合计数求解。 二、通过状态转移列出方程来,如果能递推就直接DP,不能的话,通过对式子处理,找出式子之间的关系和结构上的特点,通过待定系数来进行迭代,最后求出结果。 。。。再有的话就是用容斥啊状压啊什么的【估计自己也不一定想得到 言归正传来说题吧,我把自己的思路写在注释里了。 参考题解:点击

Neutralzz的博客 360

HDU4035 Maze (概率DP)

转:https://www.cnblogs.com/kuangbin/archive/2012/10/03/2711108.html 题意: 有n个房间,由n-1条隧道连通起来,实际上就形成了一棵树, 从结点1出发,开始走,在每个结点i都有3种可能: 1.被杀死,回到结点1处(概率为ki) 2.找到出口,走出迷宫 (概率为ei) 3.和该点...

weixin_30337251的博客 149

HDU 4035:Maze 概率DP求期望(有环)

Maze 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4035 题意: 有N(2 ≤ N ≤ 10000)个房间和一堆双向边(不存在环),每个房间有ki和ei两个值,分别代表回到房间1和游戏结束的概率,求游戏结束时通过的边数的期望 题解: 一道很好很经典的求期望的题 设E[i]为以i为起点,直到游戏结束所通...

weixin_30621919的博客 156

概率DP入门大集合

概率DP主要用于求解期望、概率等题目。 转移方程有时候比较灵活。 一般求概率是正推,求期望是逆推。通过题目可以体会到这点。   首先先推荐几篇参考的论文: 《信息学竞赛中概率问题求解初探》 《浅析竞赛中一类数学期望问题的解决方法》 《有关概率和期望问题的研究 》   1、POJ 3744  Scout YYF I 此题是一个用矩阵优

Nicolas 2316

HDU 4035 Maze

http://acm.hdu.edu.cn/showproblem.php?pid=4035 经典概率DP。 #include #include #include #include #include #include #include #include #include #include using namespace std; const int maxn = 100

XDU_PYL的博客 469
上一篇: 简单概率dp(期望)-hdu-3853-LOOPS
下一篇: 简单概率dp(期望)-hdu-4405-Aeroplane chess
Accagain
博客等级 码龄14年 376粉丝 316原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值