poj 2057 树形dp+贪心(蜗牛找家的期望值)

从PLC到机械臂:揭秘工业自动化中的信号交互与控制逻辑 本文深入解析了PLC与机械臂在工业自动化中的信号交互与控制逻辑,详细介绍了硬件连接方案、通信机制及控制逻辑设计。通过西门子PLC与六轴机械臂的实战案例,展示了从信号采集到动作执行的完整流程,并探讨了高级控制策略与行业应用前景,为工程师提供了一套完整的实践框架。 阅读详情

题意:一只小蜗牛爬树的时候从树枝的末端(也就是从叶子结点)上掉了下来,但是它的壳子还留在上面。于是它从根节点去寻找它的壳子(但是它完全忘记了之前走过的路)。在路途中有些节点上可能住着虫子,虫子可以告诉小蜗牛它之前来没来过。假如壳子在每个叶子节点上的概率相等,为蜗牛选出一条路,使得所需要走的路程的期望最小。

思路:树形dp+贪心,完全自己想出来的,开心!!

显然可以构造状态dp[x][0]表示目的地不在以x为根的子树上需要走的路程期望(相当于遍历这个子树走过的路程),dp[x][1]表示从x出发,且目的地在以x为根的子树上走的路程期望。显然如果x上有虫子,那么dp[x][0]=0;否则dp[x][0] = sum(dp[y][0]+2) , y是x的儿子;

那么求dp[x][1]的时候涉及的问题就是儿子的访问顺序,如果考虑全排列,题目给了每个结点最多有8个儿子,那么复杂度是O(8!*n) = O(40,320,000),时限3s,现在想想说不定可以。但是最好的做法当然是找出规律,贪心来选择顺序。

考虑两个连续的儿子i和j,目的地在i所在子树的期望是son(i)*k+dp[i][1](其中k是访问其他儿子没找到经过的路径),目的地在j的期望是son(j)*(k+dp[i][0]+2)+dp[j][1](+2表示从i回到x,再从x到j)。如此再写出j在前i在后的和,两相比较消去相同项得到前者是son(j)*(bi+2),后者是son(i)*(bj+2),那么如果i在前,所要求的条件就是前者小于后者,那么也就是(bi+2)/son(i)要小于(bj+2)/son(j)。这是贪心经典的交换论证方法。也就是说最优的排列应该按照(bi+2)/son(i)的大小来进行排序。

最后,输出dp[1][1]/son[1]即可。

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <queue>
using namespace std;
#define INF 0x3fffffff
#define clr(s,t) memset(s,t,sizeof(s))
#define N 1001
bool ch[N];
int dp[N][2],first[N],top,son[N];
int n;
struct edge{
    int y,next;
}e[N];
struct node{
    int a,b,son;
};
void add(int x,int y){
    e[top].y = y;
    e[top].next = first[x];
    first[x] = top++;
}
int cmp(node x,node y){
    return (x.b+2)*y.son < (y.b+2)*x.son;
}
void dfs(int x){
    int i,j,k,y;
    struct node p[N];
    j = 0;
    dp[x][0] = dp[x][1] = 0;
    if(first[x] == -1){
        son[x] = 1;
        return;
    }
    son[x] = 0;
    for(i = first[x];i!=-1;i=e[i].next){
        y = e[i].y;
        dfs(y);
        dp[x][0] += dp[y][0]+2;
        son[x] += son[y];
        p[j].a = dp[y][1];
        p[j].b = dp[y][0];
        p[j++].son = son[y];
    }
    if(ch[x])
        dp[x][0] = 0;
    sort(p,p+j,cmp);
    for(i = 0,k=1;i<j;i++){
        dp[x][1] += p[i].son*k+p[i].a;
        k += p[i].b+2;
    }
}
int main(){
    while(scanf("%d",&n) && n){
        int i,j;
        char str;
        top = 0;
        clr(first, -1);
        clr(ch, false);
        for(i = 1;i<=n;i++){
            scanf("%d %c",&j,&str);
            if(i>1)
                add(j,i);
            if(str == 'Y')
                ch[i] = true;
        }
        dfs(1);
        printf("%.4lf\n",(double)dp[1][1]/son[1]);
    }
    return 0;
}


Windows下构建ImGui.Net 工具 Visual Studio 2017 操作 下载项目 git clone https://github.com/mellinoe/ImGui.NET.git 编译 右键以下两个项目并调试: ImGui.NET.SampleProgram ImGui.NET.SampleProgram.XNA Error fix 中间遇到一些问题: SDK版本不对 去微软官网下载安装对应版本 由于设置了代理被远程服务器拒绝连接 关闭代理(也许在环境变量中) nuget源无对应资源,404 NOT FOUN 阅读详情

相关推荐

UE5网络模块实战:属性复制、RPC与联机开发踩坑指南

多人联机开发中,网络同步是核心难题。UE5网络模块以服务器权威为基础,通过Actor复制、RPC和所有权机制实现多端状态一致。理解属性复制与OnRep回调、区分Server/Client/Multicast RPC的适用场景,是构建稳定联机架构的关键。本文结合数字孪生与多端协作场景,探讨如何将渲染与逻辑分离,并针对打包后网络失效、端口防火墙、崩溃排查等工程实践问题给出解决方案。通过蓝图接口解耦表现层,利用C++创建StaticMesh组件实现服务器逻辑与客户端表现分离,同时注意专用服务器不加载渲染依赖(如D

weixin_29010003的博客 269

poj 2057 树形DP,数学期望

题目链接:http://poj.org/problem?id=2057 题意:有一只蜗牛爬上树睡着之后从树上掉下来,发现后面的"房子"却丢在了树上面, 现在这只蜗牛要求寻找它的房子,它又得从树根开始爬起,现在要求一条路径使得其找到房子 所要爬行的期望距离最小. 爬行距离如下计算, 题目规定每一个分支和枝末都看做是一个节点, 这些节点之间的距离都是1, 在分支上可能会有热心的毛毛虫, 这些...

weixin_33720078的博客 224

通过薄膜太阳能电池中的热激电流量化陷阱状态

发光(led)和光伏(PV)器件的性能取决于光活性半导体材料的质量。由于材料杂质或在制造过程中在半导体材料中无意地引入缺陷,导致偏离最佳性能。这些缺陷被称为阱态,或简称“阱”,它是半导体带隙内的高能态。一般来说,陷阱的发生可能是由于材料杂质(在散装)或在不同材料层之间的界面。在有机半导体中,由于天然物质的无序性,阱态经常出现。在无机和杂化半导体(例如:杂化钙钛矿、硅……)中,晶界的存在是圈闭态的已知来源。由于陷阱产生的原因多种多样,它们对装置的影响也是多种多样的。由于载流子的多次捕获和释放事件,特别是浅阱的

FluximAG的博客 2848

POJ 2057 树状 DP

题意 传送门 POJ 2057 题解 对于某个节点,有屋子在其子树上与不在其子树上两种情况。求步数的最小期望,因为叶子节点数固定,遍历每一种可能的走法,求走到每一个节点(此时假设屋子在该节点)的最小步数和即可。 对于屋子在与不在节点 iii 子树上的情况,记为 suci,failisuc_{i},fail_{i}suci​,faili​ ;对于其子树的叶子节点数,记为 sonison_{i}soni​ 。考虑到判断屋子不在屋子上的情况,需要搜索每一条分支 failp=∑ch在p的子树上(failch+2)f

neweryyy的博客 271

【技术解析】华为智算中心:昇腾AI算力与无损网络如何驱动大模型训练

本文深入解析了华为智算中心如何通过昇腾AI算力与超融合以太无损网络的协同,驱动千亿参数大模型的高效训练。昇腾NPU提供专用计算引擎,而基于RoCE的无损网络则通过PFC、ECN等技术确保万卡集群间的高带宽、零丢包通信,实现算力利用率最大化,解决大规模AI训练的核心瓶颈。

weixin_29311017的博客 191

UE4-(反射)场景采集之场景采集2D

一、场景采集分为两种:场景采集2D、场景采集立方体 场景采集2D:采集2D图片模式。 操作: 1.选择场景采集2D,是一个摄像机的物体,摆放到场景中。 2.在文件夹空白处创建纹理,一定要注意创建纹理的格式, 纹理分为立方体渲染目标和渲染目标,此处我们使用的是2D模式,所以选择渲染目标(Texture Render Target2D)。创建后重命名为RenderTextue2D。 3.选择场景中刚拖入的 SceneCapture2D 摄像机在细节面板的Scene Capture 将..

Stone的博客 4601

poj 2057 树形dp

这个题目需要先推出已知顺序下的递推计算公式,然后再通过计算交换相邻两项的差值来找出贪心的策略。 #include #include #include #include using namespace std; const int maxn=1e3+9; int fa[maxn],fb[maxn],leaves[maxn]; bool is[maxn]; int head[maxn],lo

yrleep的专栏 729

Unity零基础到进阶 | Unity Shader 深度硬核解析

Unity Shader 是运行在GPU上的可编程渲染程序,是整个引擎渲染体系的算法核心。它通过 Unity 封装的 ShaderLab 语法 + GPU 原生 HLSL 语言编写,定义了「网格数据如何经过光照计算、纹理采样、几何变换、混合测试,最终转化为屏幕像素颜色」的完整规则。 通俗来说:Shader 决定物体「怎么画」,材质(Material)只是 Shader 的参数实例,决定「用什么画」。没有 Shader,材质就是无渲染能力的空壳;没有材质,Shader 无法落地到具体物体。

努力前行,总会成为自己心中的那道光 1万+

poj 2057 树形dp ,特别考思路的好题。

<br /><br />poj 2057 虽然是树形dp<br />题目描述:现在你在树根上,你的房子在任意一个叶子上面,然后你要找遍所有的叶子取找你的房子,没选择一条路,你必须走到叶子或者树的分支上面可能有一些毛毛虫,他们可以告诉你后面的叶子有没有房子,如果没有你就可以返回。现在让你求出找到房子的期望。<br /> <br /> <br />但是其实这个问题不算是dp ,或者说是dp 的弱化,其实是重点是考察一个分析的能力<br />首先拿道这个题目的想到了树形dp 要求的折返,和不折返的情况,但是怎么解

mindmb的专栏 1413

FPGA控制AD5754实现模数转换Verilog代码与测试激励

本文提供了使用FPGA控制AD5754芯片实现数字信号转模拟信号的Verilog代码和测试激励。AD5754芯片简介:AD5754是一款16位数字信号转模拟信号的芯片。通信方式:FPGA与AD5754之间通过SPI接口进行通信,SPI时钟clk的最大频率为30MHz。模拟输出:AD5754提供了四路模拟输出。工作方式:当前AD5754采用单极性工作方式。指令刷新:根据现有理解,同轴的速度和电流指令应同时刷新。利用LDAC引脚控制模拟信号的刷新,但需实际验证。CLR信号验证。

whm128的博客 244

零基础入门simulink仿真--通信领域的调制解调技术:基于Simulink的PM信号调制与解调仿真建模示例

PM的基本原理是将基带信号(如语音或音乐信号)加载到高频载波信号的相位上。通过改变载波的瞬时相位,可以实现信息的传输。PM的优点包括抗噪声能力强、频谱利用率较高等,但其解调过程相对复杂。通过Simulink,我们可以通过模块化的建模方式实现PM信号的调制和解调过程,并观察信号在信道中的传输效果。通过本指南,我们介绍了如何基于Simulink搭建一个完整的PM信号调制与解调仿真模型,并进行仿真和性能评估。背景介绍:理解PM信号调制与解调的基本原理及其应用。所需工具和环境:列出进行PM仿真所需的工具和环境。

amy_mhd的博客 604

poj 2057 树形dp 贪心

思路:设sum[i],le[i],back[i],worm[i]分别表示以i为根节点需要的完成步数,叶子节点数,失败回退步数,以及i是否有虫。 #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #define Maxn 1010 usin...

weixin_30274627的博客 96

Oracle数据库表空间使用情况查询

在Oracle数据库中,表空间(Tablespace)是用于存储表、索引和其他数据库对象的逻辑存储单元。了解表空间的使用情况对于数据库管理员和开发人员来说是非常重要的,因为它可以帮助他们监控数据库的空间使用情况并进行容量规划。本文将介绍如何查询Oracle数据库中的表空间使用情况。通过执行以上SQL查询语句,你可以获得Oracle数据库中表空间的使用情况、文件大小和表空间大小等信息。这些信息可以帮助你了解数据库的存储情况,并进行适当的优化和容量规划。查看表空间的数据文件和表空间大小。查看表空间的使用情况。

CsmbPascal的博客 857

pku 2057 The Lost House 树形dp+背包dp 解题报告

 pku 2057 The Lost House 解题报告一、题目大意:蜗牛的房子遗失在了一棵树的某个叶子结点上,它要从根结点出发开始寻找它的房子。有一些中间结点可能会住着一些虫子,这些虫子会告诉蜗牛它的房子是否在以这个中间结点为根的子树上,这样蜗牛就不用白跑路了。当然,如果有些结点没有住着虫子的话,那么可怜的蜗牛只有靠自己决定访问顺序来探索了。假设蜗牛走过一条边的耗费都是1,且房子遗

find_my_dream的专栏 1851

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

POJ 2057 The Lost House 树形DP+贪心

-Claude 1484

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

poj2057——the lost house

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

tzyshiwolaogongya的博客 261

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

POJ 2057 The Lost House 树状DP

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

1854

The Lost House POJ - 2057(树形dp+贪心 (双线最优子结构问题))

思路 题意:有一只蜗牛爬上树睡着之后从树上掉下来,发现后面的”房子”却丢在了树上面, 现在这 只蜗牛要求寻找它的房子,它又得从树根开始爬起,现在要求一条路径使得其找到房子 所要爬行的期望距离最小. 爬行距离如下计算, 题目规定每一个分支和枝末都看做是 一个节点, 这些节点之间的距离都是1, 在分支上可能会有热心的毛毛虫, 这些毛毛虫 会如实的告诉蜗...

untilyouydc 263

poj 2057 && 1947

两道树形 dp 题目:http://poj.org/problem?id=2057 题意:蜗牛的房子丢在了树上的某个节点上(每个节点的可能性相同),有些节点上有虫子,可以告诉蜗牛它的房子是不是在以这个节点为根的子树上,蜗牛找到房子的最小数学期望值是多少。 首先期望是:找到房子走的步数 / 叶子节点的总数。叶子节点总数是固定的,那么走的步数越少,期望值也就越小,因为一个节点可能有多个孩子,从不...

weixin_30318645的博客 84

POJ 2057 The Lost House

感想:基本看的是资料和解题报告才A出来的,实话说,这题真心不是树形dp的入门题,不骂人,和谐。  详情请参考黄劲松的《贪婪的动态规划》 ,如果没找到的话可以留言,我发给你。 题意:蜗牛的房子遗失在了一棵树的某个叶子结点上,它要从根结点出发开始寻找它的房子。有一些中间结点可能会住着一些虫子,这些虫子会告诉蜗牛它的房子是否在以这个中间结点为根的子树上,这样蜗牛就不用白跑路了。当然,如果有些结

purevegetable 775

poj2057(树形dp)

链接:点击打开链接 题意:给出一个n个节点的树,现在你站在根节点,有一个物品等概率的出现在叶子节点。现在你要确定一条搜索的距离,使得当物品等概率出现在各个叶子节点时,从根节点出发按照确定的路径找到物品的距离的期望最小,并输出最小的期望,原题中有样例解释 代码:#include #include #include #include #include #include #include

stay_accept的专栏 430

POJ 2057

好多wa的答案 = = 此处记录一个AC的 #include <cstdio> #include <cstring> #include <algorithm> using namespace std ; #define eqs 1e-8 struct node{ int u , v ; int next ; }edge[1010] , t...

一只菜鸟夹 388

(蓝桥真题)爬树的甲壳虫(概率DP)

蓝桥真题

AC__dream的博客 1588

poj 2057 好题

他说的对,他说的好 #include <iostream> #include <cstdio> #include <iomanip> #include <string> #include <cstdlib> #include <cstring> #include <queue> #include <set&g...

Fawkess的博客 217

POJ2057

题目的关键是达到某个节点的时候,以怎样的顺序去遍历它的子树呢? 我们假设某个节点有两个子树A和B,我们定义Pa是Snail的Home位于A子树中的叶节点上的概率,Pb是Snail的Home位于B子树中的叶节点上的概率;Sa是Home位于A子树上所要走的路程,Fa是Home不在A子树上所要走的路程,Sb和Fb同理。假设先走A树再走B树,所走的步数为:Sa*Pa+(Fa+Sb)*Pb;如果是先走B树

whosemario的专栏 1400

poj-2057-树形dp

虽然写了很久,但是1A还是很开心的。。。。 这个题目找准状态转移,然后运用部分贪心优化一下。 int pos[1010];//标记当前节点是不是有虫子 int snode[1010];//标记当前节点为根的子树中包含的叶子节点。 int die[1010];//标记当前节点为根的子树中不含有房子的步数 int win[1010];//标记当前节点为根的子树中  含有房子的步数 #i

青竹梦 1185
上一篇: poj 1848 树形dp(添加最少的边每点都恰在一个圈中)
下一篇: poj 1952 最长递减子序列+求个数
dumeichen
博客等级 码龄13年 55粉丝 475原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值