POJ 2057 The Lost House

Rust 与 C/C++:Rust 比 C/C++ 更好还是只是“技能问题”? 对于许多嵌入式系统开发人员而言,的崛起似乎掀起了一股不小的浪潮,特别是在相较于传统的语言,Rust的“内存安全”优势让人眼前一亮。然而,是否可以将Rust作为C/C++的替代品?或者说,Rust是否真的比C/C++更好,抑或它只是一个“技能问题”呢?在嵌入式开发的领域,我观察到,尽管Rust在一些高性能、内存安全敏感的场景中受到了广泛推崇,但它在实际应用中的普及度,特别是在嵌入式领域,依然有限。今天,我会从多个角度探讨这个问题,并且分享一些对于Rust、C/C++以及嵌入式系统开发的个人见解。 阅读详情

感想:基本看的是资料和解题报告才A出来的,实话说,这题真心不是树形dp的入门题,不骂人,和谐。  详情请参考黄劲松的《贪婪的动态规划》 ,如果没找到的话可以留言,我发给你。


题意:蜗牛的房子遗失在了一棵树的某个叶子结点上,它要从根结点出发开始寻找它的房子。有一些中间结点可能会住着一些虫子,这些虫子会告诉蜗牛它的房子是否在以这个中间结点为根的子树上,这样蜗牛就不用白跑路了。当然,如果有些结点没有住着虫子的话,那么可怜的蜗牛只有靠自己决定访问顺序来探索了。假设蜗牛走过一条边的耗费都是1,且房子遗失在每个叶子结点的概率都是相等的,请算出蜗牛找到他的房子的最小数学期望值。(就这么几句话,竟然这么一大篇英文)

思路: fb[i]表示蜗牛不在i为根的子树上的时候遍历该子树需要的时间

         fa[i]表示蜗牛的房子在i为根的子树上的期望和。    l[i]表示以i为根的子树上叶子节点的数目

题目的答案即为  : fa[root]/l[root];   

     u的孩子节点依次为s[1].......s[k]

     fa[u]的计算方式为:fa[\u] = 0; fb[u] = 0;

     for(i=1   to k)       //这里的值还需要有子节点遍历的顺序来决定

      {

     ① fa[u] = fa[u] + (fb[u]+1)*l[s[i]]+fa[s[i]]     //这里的fb[u]一直在更新,只是表示遍历前面子节点需要的时间

     ②fb[u] = fb[u] + fb[s[i]] + 2     

      }

  ②的形式大家应该都懂,主要是①,

转自风炎大神:所以得出Success[father]=(Failure[father]+1)*Leaves[k]+Success[k]。比较费解的就是用红色标出的那部分了。

先看图(用的是题目中的例子):

     1

    / \

2    3(4)

/  \

4(1)  5(3)

先假设3为根,那么遍历4和5的步数1+3=4;那么如果1是根,这时要遍历4和5的步数是2+4=6,多一条边,使到4到的步数从1变为2,使到5的步数从3变为4。加起来就比原来多了2。也就是说如果有N个叶结点的话,那么应该多1*N步了。那么如果先从1到2,再从2回到1,之后再走呢。这时应该多了failure[1到2]*N步了。这就解释了红色那部分(红色中的那个failure[father]从代码中可以看出是走K前失败的步数).

继续:

  可以看到  若将 子节点  位置改变, 则对于公式 后两项没有影响,

  所以对于 子节点 间位置关系, 我们仅需考虑第一项就可以了

    令

       为 两子节点  顺序放置时 值。

      为 两子节点  交换放置时 值。

    则 两值做差 得到:

      

           所以我们得出结论, 顺序位置 则只跟元素 的信息有关,于别的元素的排列情况无关,所以元素 是可比的。

           

/*
真心把我虐得好惨,一看题目就傻眼了,搞了半天看懂题意发现完全超出自己的实力之外,然后去看黄劲松写的《贪婪的动态规划》,我靠,
发现完全就是纯数学,搞了一下午就看懂了这个推理(里面一句话将我困住半天,真希望这些大神们写点注释)
 */
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1010
using namespace std;
int n;
struct Node {
bool flag;
int fa,fb,l;//fa为成功的,fb为失败,l为叶子结点的个数
}T[N];

vector<int> Q[N];

bool cmp(int x,int y)
{
   return ((T[x].fb+2)*T[y].l < (T[y].fb+2)*T[x].l);//贪心的顺序
}

void dfs(int u)
{
    for(int i=0;i<Q[u].size();++i)
     dfs(Q[u][i]);
    T[u].fa = T[u].fb = T[u].l = 0;

    if(Q[u].size()==0) T[u].l = 1;
    if(Q[u].size() > 0) {
       sort(Q[u].begin(),Q[u].end(),cmp);

       for(int i=0;i<Q[u].size();++i)
       {
           int v = Q[u][i];
           T[u].fa += (T[u].fb+1)*T[v].l + T[v].fa;
           T[u].fb += T[v].fb + 2;
           T[u].l += T[v].l;
       }
       if(T[u].flag) T[u].fb = 0;
    }
}

int main(void)
{
    while(cin>>n,n)
    {
     for(int i=1;i<=n;++i)  Q[i].clear();
     for(int i=1;i<=n;++i)
     {
       char ch;
       int tmp;
      scanf("%d %c",&tmp,&ch);
      if(tmp!=-1)//-1表示的是root
      {
        Q[tmp].push_back(i);
      }
      T[i].flag = (ch=='N'?false:true);
     }
     dfs(1);
     double ans = 1.0*T[1].fa/T[1].l;
     printf("%.4llf\n",ans);
    }
    return 0;
}



测试人必看!正交表与Allpairs工具对比:如何选择最适合你的组合测试方案? 本文深入对比了正交表、PICT与Allpairs三种主流组合测试方案,帮助测试人员根据项目场景做出最佳选择。文章分析了各自的核心原理、优劣势及适用场景,特别强调了在涉及复杂约束时PICT工具的强大功能,并提供了从原理学习到CI/CD集成的实战选型指南。 阅读详情

相关推荐

高通410随身WiFi刷OpenWRT与Debian双系统一键集成方案

本文详细介绍高通410随身WiFi设备刷入OpenWRT与Debian双系统的一键集成方案。通过虎王工作室提供的一键刷机包,用户可轻松实现双系统部署,兼顾OpenWRT的网络功能与Debian的完整应用服务,适用于网络加速、服务器部署等多种场景,并提供了硬件资源分配与系统切换的实用指南。

docker7nomad的博客 1137

POJ 2057 The Lost House 经典树形DP+贪心

POJ 2057 The Lost House 树形DP+贪心

-Claude 1484

Windows系统下AutoDock 4.2.6安装避坑指南(附MGLTools配置技巧)

本文详细介绍了在Windows系统下安装和配置AutoDock 4.2.6的完整流程,特别针对分子对接研究中常见的软件安装问题提供了解决方案。从环境准备、分步安装到常见报错处理,涵盖MGLTools配置技巧、工作目录设置和环境变量优化,帮助科研人员快速搭建稳定的分子对接平台。

weixin_29234239的博客 313

poj 2057 The Lost House

论文题,树dp多说两句,这个题的决策是在一个节点时选择子节点遍历的顺序通过贪心来优化dp#include<cstring> #include<cstdio> #include<vector> #include<cstring> #include<algorithm> using namespace std;const int maxn = 1123;vector<int> edge[maxn];vo

lambda QAQ 337

CentOS7下通过YUM源高效部署Zabbix7 Agent指南

本文详细指导在已结束生命周期的CentOS7系统上,通过更换YUM源(如阿里云镜像)并添加Zabbix官方仓库,高效部署Zabbix7 Agent。文章涵盖从源配置、软件安装、关键参数修改到服务启动与防火墙设置的全流程,帮助用户解决依赖错误,快速建立服务器监控。

weixin_29230059的博客 267

Ollama安装教程

Ollama 是一个开源的大语言模型(LLM)部署工具,专为在本地机器部署和运行大模型而设计,通过简单的命令就可以在本地快速运行大模型(如DeepSeek、Llama、Gemma、QWQ等)。非常适合开发者、研究人员以及对数据安全和隐私有较高要求的企业和用户

学习AI应用开发,分享AI干货、获取最新AI咨询 3852

【POJ2057】The Lost House【TreeDP】

【题目链接】 比较经典的一道TreeDP。 因为概率是相等的,所以我们只需要计算最小步数即可,最后答案再除以叶子节点个数。 设leaf[u]表示以u为根的子树中叶子节点的个数。 设fail[u]表示以u为根的子树中,从u出发,找房子失败后,回到u点,按最优策略走的步数。 设succ[u]表示以u为根的子树中,从u出发,并成功找到房子,按最优策略走的步数。 最优策略即我们要找

BraketBN 530

Python接入企业微信群机器人图文教程,实现恐贪指标自动触发微信消息提醒功能!Python 企业微信 群机器人 消息提醒 Webhook 企业微信接口

✅ 企业微信群机器人的添加方式;✅ 如何获取 Webhook 地址;✅ Python 如何用 requests 发消息;✅ 如何在实际业务中触发自动提醒;这种方式不仅适合个人开发者、测试人员,也适用于小团队、运维通知等场景,部署简单、触发灵活、响应及时!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 915

POJ 2057 The lost house

这道题求的是期望。 首先,一看到期望,就会想到可以将问题分成若干个子问题,再分开算期望,所以这道题可以使用动态规划。 注意到每个叶子有房子的概率是均等的。所以答案就是遍历每个叶子最少的步数/叶子的总数。 所以问题划归为求遍历所有叶子的最少步数。 我们令fail[x]为以x为根的子树找不到房子的最少步数。 su[x]为以x为根的子树中找到房子最少步数。 le[x]为以x为根的子树中叶子的

AChunter的专栏 1332

YOLOv8改进策略【卷积层】| TIP 2025 MFA 多阶段特征聚合 大核扩感受 + 多梯度融合,强效增强弱小目标特征

红外弱小目标尺寸极小、信噪比低,在特征传递中极易丢失信息;常规卷积感受野单一、梯度源不足,难以同时捕捉局部细节与全局上下文,导致小目标特征表达弱、检测漏检。因此提出多阶段特征聚合 MFA,用大核卷积+多分支+通道注意力强化小目标特征提取。

Limiiiing的博客 59

FPGA实现串口升级及MultiBoot(九)BPI FLASH相关实例演示

与SPI相关知识并没有什么太多区别(别杠硬件或者架构上),相关知识点都在上面指出,大家有什么其他需要注意点,欢迎留言讨论。关于“四样错误”就不演示了,没什么太大区别,下一讲我们开始串口升级。PS:为了扩展ICAPE2原语的使用,在原来的基础上增加了几个常用FPGA ID,并在触发启动时候增加了可选电平触发或上升/下降沿触发(例化IP时选择),新版本号V1.1。

OpenFPGA的博客 1444

poj2057——the lost house

题目大意:蜗牛把壳落在一个树的叶子结点了,壳在每个叶节点的概率相同,它在根节点处开始爬,可能在树杈处遇到虫子告诉他壳是否在这个子树中,每个节点间距离为1,问他找到壳的爬行距离的最小期望 输入:(包含几个数据集)             树的结点个数n             第i个结点的父亲结点 是否有虫子(Y/N)             结点个数n为0//表示输入结束 输出:爬行距离

tzyshiwolaogongya的博客 261

华为OD技术面真题 - Python开发 - 2

汇总华为OD技术面八股Python八股,高频技术真题并提供详细解答。

qq_45776114的博客 910

POJ 2057 The Lost House 树状DP

题意:一直小蜗牛从树顶掉了下来,但是它的壳子还留在上面。于是它有从根节点去寻找它的壳子(但是它完全忘记了之前走过的路)。在路途中有些节点上可能住着虫子,虫子可以告诉小蜗牛它之前来没来过。假如壳子在每个叶子节点上的概率相等,求出蜗牛所需要走得路程的期望。 题解:关键是确定子节点的

1854

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

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

【树形DP】【poj 2057】The Lost House

http://poj.org/problem?id=2057 这道题很久以前就看到过,一直没看懂题,所以就一直放着 先学好英语,然后就可以做了 这篇论文里讲得很清楚 http://wenku.baidu.com/link?url=t2T0VjAbXPHk1tEM0o8f8orqAbDT34Xs0mAGDq4fxylFsla1RENJhrWgPmq6P7-DkhenpY9ASThFD

willinglive 522

精雕软件(JDpaint) 5.5 绿色版

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

poj-2057 The Lost House

题意: 给出一颗有根树,边权均为1; 一个S在根结点上,要找到在某个叶子结点上的它的房子; 有的结点上有w,可以告诉S当前结点的子树上是否有它的房子; 房子在每个叶子结点的概率相等,选择一种最佳的计划,来让S走的期望值最小;

140142 991

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

POJ 2057 The Lost House 树形DP+贪心

最近一直在做树形dp,感觉这道题出的非常不错。卡了我一天。。        一上来读完题感觉和dp的思路很像,但是自己太弱了,无从下手。于是各种百度看结题报告、看论文。推荐几个结题报告  http://hi.baidu.com/zhymaoiing/blog/item/1aa0e1ccf1bc0d1b01e9288a.html http://blog.sina.com.cn/s/blog_

1292765944的专栏 936

POJ 2057 The Lost House (经典树形dp)

  不错的题,做了两次。两次感觉不一样,第一次那叫一个费劲啊。。。看了一天的解题报告,才大概理解怎么回事,这次做完好好写写总结吧。 开始想到的状态有sum[i]表示以i为根的子树走遍所有的字节点的值,leaves[i]表示以i为跟的子树的叶子节点数。显然是错误的。。。好多状态表示不出来。 后来有考虑分回到i节点和不回到i节点这两种状态。但还是设计不出来,最不能确定的就是一个顺序问题。无奈翻了一...

weixin_33851604的博客 163
上一篇: poj 3140 Contestants Division
下一篇: poj 1037 A decorative fence
purevegetable
博客等级 码龄14年 24粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值