HDU 4003--Find Metal Mineral(树形dp)

树形DP ———— 【HDU4003】 Find Metal Mineral 给一棵n个节点的树, 节点编号为1~n, 每条边都有一个花费值。有k个机器人从s点出发, 问让机器人遍历所有边,最少花费值多少? 阅读详情

来源:http://acm.hdu.edu.cn/showproblem.php?pid=4003

题意:给定k个机器人去遍历n个节点的树,求最小花费

分析:dp[root][j]表示以root为根时,用j个机器人走完所花费的最小价值。

状态转移方程:

当j==0时,dp[i][0]=dp[son][0]+2*w son是i的所有子节点,w是i到son的花费;

当j!=0时,dp[i][0]=min(dp[son][t]+dp[i][j-t]+t*w)son是i的所有子节点,w是i到son的花费。

 

#include<iostream>
#include<algorithm>
#include<iomanip>
#include<cstring>
#include<string>
#include<cstdio>
#include<cmath>
#include<queue>
#include<map>
#include<vector>
#define Maxn 10050
using namespace std;
struct node
{
    int x;
    long long val;
    node(int a,long long b):x(a),val(b) {};
};
vector<node> edge[Maxn];
int n,s;
long long dp[Maxn][15],k;
void dfs(int root,int fa)
{
    for(int i=0;i<edge[root].size();i++)
    {
        if (edge[root][i].x != fa)
        {
            dfs(edge[root][i].x,root);
        }
    }
    if((edge[root].size()==1&&fa!=-1)||(fa==-1&&edge[root].size()==0))
    {
        for(int i=0;i<=k;i++)
            dp[root][i]=0;
        return;
    }
    for(int i=0;i<edge[root].size();i++)
    {
        int v=edge[root][i].x;
        long long w=edge[root][i].val;
        if (v!=fa)
        {
            for(int j=k;j>=0;j--)
            {
                if(dp[root][j]==-1)
                {
                    if(!j)
                        dp[root][j]=dp[v][j]+2 * w;
                    else
                    {
                        for(int t=1; t<=j; t++)
                            if(dp[root][j]==-1||dp[root][j]>dp[v][t]+t*w)
                                dp[root][j]=dp[v][t]+t*w;
                    }
                    continue;
                }
                else
                    dp[root][j]+=dp[v][0]+2*w;
                for (int t=1;t<=j;t++)
                {
                    dp[root][j]=min(dp[root][j],dp[root][j-t]+dp[v][t]+t*w);
                }
            }
        }
    }
}
int main()
{
    while(scanf("%d%d%I64d",&n,&s,&k)!=EOF)
    {
        int a,b;
        long long c;
        for(int i=0;i<=n;i++)
            edge[i].clear();
        for(int i=1;i<n;i++)
        {
            scanf("%d%d%I64d",&a,&b,&c);
            edge[a].push_back(node(b,c));
            edge[b].push_back(node(a,c));
        }
        memset(dp,-1,sizeof(dp));
        dfs(s,-1);
        printf("%I64d\n",dp[s][k]);
    }
    return 0;
}
GD32F307 USB主机模式 外接U盘升级 调试问题记录 在移植USB驱动做主机读U盘时遇到的问题。 问题1、移植USB驱动完成后,插入U盘,一直在 usbh_core_task 的默认case 和测试case中反复执行无法执行到后面的连接及以后得步骤。 问题2、在 usbh_core_task 函数中,一直卡在枚举的case,无法执行下面操作。具体卡在urb_wait的while循环无法跳出。 阅读详情

相关推荐

2024 年高教社杯全国大学生数学建模竞赛题目【A/B/C/D/E题】完整论文+代码+结果

2024国赛A题参考论文。2024国赛D题参考论文。2024国赛E题参考论文。2024国赛B题参考论文。2024国赛C题参考论文。

qq_52590045的博客 5359

HDU4003_Find_Metal_Mineral_树形DP分组

额- -其实也是看的别人的题解才做出来的,不过自己完完整整的写了一遍加详尽注释,感觉理解的透彻了些,又给同级的同学们讲了一遍,总之收获还是蛮大的。 写的代码是交的一道DIY的改编题,里面数据被肖神变态加强了,但是时间还是跟原题一样(T_T)导致我用Vector建树被卡时间了,后来开2000ms的试了一下1078ms- -瞬间无语,只能说肖神编的数据太恰到好处了,所以当时没办法就照着模版写了用结构

u011343989的专栏 617

GAMES104:02引擎架构分层-学习笔记

用户层工具层(Tool Layer):编辑器、工具界面功能层(Function Layer):渲染Rendering、动画Animation、物理Physics、相机Camera和实现游戏性的脚本Script、状态机FSM、AI等功能模块资源层(Resource Layer):各类图片、动画、音频资源加载核心层(Core Layer):核心功能如内存管理、容器分配、数据计算、多线程处理等平台层(Platform Layer):对接不同游戏平台、主机和硬件。

噗噗噗的博客 1268

hdu 4003 Find Metal Mineral 树形DP

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 题意:有n个矿,矿之间有n-1条路,每条路有相应花费。有k个机器人,从s点出发,求遍历每个矿的最小花费。 对于一个根节点s,如果机器人足够遍历所有的子树,可以看做常规的树状dp,分配c个机器人去遍历子树,求最优解。 如果机器人不够时,那么就从别的子树那里借一些机器人,从根节点出法,

弱菜zc 717

【没有网络,安装python包】如何从 PyPI 下载并安装 Plotly 的离线包

在某些情况下,您可能需要在没有互联网连接的环境中安装 Python 包,例如在飞机上、在某些受限制的网络环境中或在需要离线安装的场景下。以下是如何在 PyPI(Python Package Index)下载 Plotly 包并进行离线安装的详细步骤。

赖德发的博客 1104

1G/2.5G Ethernet PCS/PMA or SGMII

SGMII即Serial GMII,串行GMII,收发各一对差分信号线,时钟频率625MHz,在时钟信号的上升沿和下降沿均采样,所以总的数据速率为1.25Gbps=625Mbps*2。参考时钟RX_CLK由PHY提供,是可选的,主要用于MAC侧没有时钟的情况,一般情况下,RX_CLK不使用。收发都可以从数据中恢复出时钟。在TXD发送的串行数据中,每8比特数据会插入TX_EN/TX_ER 两比特控制信息,同样,在RXD接收数据中,每8比特数据会插入RX_DV/RX_ER 两比特控制信息。

sqzjiayou的博客 1万+

HDU4003(Find Metal Mineral 树形dp)

题目 挺好的一道题。 最终状态 这颗子树没有机器人,遍历完离开了,那么一定是1个机器人去完成这颗子树的遍历过程的。所以下面第24行代码里才会有 +2* w; x是由他的每个子树y1 y2 y3…转移过来的,每个子树所有点都要遍历,所以每个子树都一定要选一个。 dp[x][j]:最后状态 (x的子树以及x本身)共有j个机器人停留在里面。 每到一个儿子y的时候。就是分成k k->[1,j]个机器...

qq_42576687的博客 269

在Ultralytics YOLO中添加/更换模块详细指南

使用参数继承 my_module_args: &my_args [64, 3, 0.5] # 定义参数模板 backbone: - [-1, 1, MyModule, *my_args] # 引用参数。

MR_Colorful的博客 2584

hdu 4003 Find Metal Mineral 【树形dp,分组背包】

题目:hdu 4003 Find Metal Mineral  题意:火星上发现了一些n个矿厂,有 k 个机器人从 s 点出发采矿,给出路段间的花费cost,求最小的花费采所有的矿。 分类:树形dp + 分组背包 分析:结论1:假如我们从 i点出发k个机器人采完以 k 为根节点的所有矿又回到 i 点,那么花费为 i 为根节点的cost 的和 乘以 k。 对于每个节点

大神养成中..... 1536

智元机器人开源具身仿真框架 Genie Sim 入门教程

GenieSim是AgiBot推出的具身智能仿真框架,提供完整闭环开发管道,包括轨迹生成、模型训练和基准测试。框架支持Docker容器化部署,要求Ubuntu 22.04和NVIDIA硬件环境。主要功能涵盖: 支持12种基准测试任务 提供ADER评估框架 集成UniVLA/RDT等基线模型 支持PICO/键盘遥操作 具备轨迹记录回放功能 提供完整API控制接口 开发者可通过Hugging Face获取场景资产,使用标准化ROS主题与仿真环境交互。框架特别优化了碰撞检测和抓取物理模拟,适用于从简单抓取到复杂操

2506_90492529的博客 2542

【四足机器人项目实战】四足机器人支撑腿反作用力规划之VMC解耦控制方法

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、基于模型的工作空间控制框图二、原理三、缺点 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对未简化的动力学模型规划反作用力+运动学模型雅可比+虚功原理规划关节扭矩方法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、基于模型的工作空间控制框图 . . 二、原理 基于机器人的动力学模

qq_35635374的博客 6598

HDU 4003 Find Metal Mineral【经典树形DP背包】

HDU - 4003传送门 题意:给出结点数n,起点s,机器人数k,然后n-1行给出相互连接的两个点,还有这条路线的价值,要求最小花费 分析:这是我从别人博客里找到的解释,因为很详细就引用了, dp[i][j]表示对于以i结点为根结点的子树,放j个机器人所需要的权值和 当j=0时表示放了一个机器人下去,遍历完结点后又回到i结点了。状态 转移方程类似背包如果最终的状态中以i为根结点

tystrwor的博客 398

黑猫带你学eMMC协议第12篇:生产状态感知(PSA)

1 概述 1.1 什么是PSA Production State Awareness (PSA) 生产状态感知 e•MMC设备可以利用其是否在生产环境中的信息,从而在现场运作时进行不同的操作。 例如,在设备低温焊接(soldering)前,将数据写入emmc,可能导致数据出错,而正在焊接期间写入数据,出错的概率可能会更大。在低温焊接之前,emmc设备可以使用一种特定的内部操作去加载内容,这样就能减少数据出错的概率,而在低温焊接后进行常规的操作就行了。 1.2 psa如何进行工作? PSA存在于emmc5.0

黑猫奥利奥的博客 4262

HDU 4003——Find Metal Mineral【树形DP & 类树形背包变形】

题目传送门 Problem Description Humans have discovered a kind of new metal mineral on Mars which are distributed in point‐like with paths connecting each of them which formed a tree. Now Humans launches k ...

NIRVANA REBIRTH 540

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

hdu 4003 Find Metal Mineral (树形dp)

Find Metal Mineral Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submission(s): 2122    Accepted Submission(s): 965 Problem Description Humans

To be what you what to be! 1086

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【HDU4003】 Find Metal Mineral | 树形dp、思维

题目大意: 给一棵n个节点的树, 节点编号为1~n, 每条边都有一个花费值. 有k个机器人从S点出发, 问让机器人遍历所有边,最少花费值多少? 题目思路: 卡了两天的树形dp,一开始根本搞不懂如何处理回边。 那就简单分析一下了: 令dp[i][k]代表以i为根的子树,派出去k个遍历完子树 这里为了方便处理回边,所以状态的定义是: 派出去k个遍历完子树不返回,那么k = 0自然就是有回边的情况了 现在考虑一下回边的状态: 对于一棵子树,全部遍历完然后再返回根节点,权值是 子树的边权值和 * 2

一只酷酷光儿的博客 617

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【树形DP】HDU 4003 Find Metal Mineral

通道:http://acm.hdu.edu.cn/showproblem.php?pid=4003 题意:边权树.有K个机器人从S点出发, 问让机器人遍历所有边,最少花费值多少 思路:dp[i][j]表示以i为根的树用掉j个人。dp[i][0]表示用了一个人又回到上面的点,然后就是分组背包,每个组必选一个,这就有个特殊技巧,就是我们先将dp[son][0]放进背包,如果该组里有更好...

119

HDU 4003 Find Metal Mineral (树形DP)

Find Metal Mineral Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Submission(s): 1744    Accepted Submission(s): 774 Problem Description Humans have discov...

weixin_33787529的博客 101

HDU 4003 Find Metal Mineral 树形DP

题意:人类在火星上发现一个金属矿。金属矿的道路是个树形的。在每个叶子节点有矿。现在从根结点S派出K个机器人,去取所有叶子节点的矿,希望所有机器人走的距离之和最短。 思路:通过模拟可以发现,影响状态的是,有几个机器人最终留在了以u为根的子树中。 所以,定义状态dp[u][j]为以u为根的子树,最终有j个机器人留在了该子树中,所有机器人走的距离之和的最小值。 下面考虑状态转移: 1.没有机器人留

leodestiny 579

hdu 4003 Find Metal Mineral (树形背包dp)

题意 给一棵n个节点的树, 节点编号为1~n, 每条边都有一个花费值. 有k个机器人从S点出发, 问让机器人遍历所有边,最少花费值多少? 思路 很好的一题, 推荐! 前天看的这题, 今天才想出来的. 方法想出来后,代码很简单 最近做的几道dp,都是一开始没什么想法,然后过两天再想就想出来了,也许是因为人的潜意识其实会一直在想某个问题 翻看一下网上其他人的做法, 和我的稍有不同, 他们是用f(i, j)表示子树i用j个机器人的最少花费, 一开始我也是这

D_Double's Journey 3436

HDU 4003 Find Metal Mineral (树形DP+分组背包)

Problem DescriptionHumans have discovered a kind of new metal mineral on Mars which are distributed in point‐like with paths connecting each of them which formed a tree. Now Humans launches k robots on

Ab.Ever 568

Find Metal Mineral HDU - 4003 (树形DP)

Find Metal Mineral  题目连接:HDU - 4003  题意:火星上出金矿了!!!排k个机器人到S点,问机器人找完所有金矿后,最短的移动距离;如果只有一个机器人,他就要找遍所有金矿就会走重复的路,直到找到最后一个矿;如果有两个机器人,他俩就可以分头行动; 思路:每个节点都可以分0~k个机器人,但是这里有两点要注意: 1:此k非彼k,这里的k指的是该节点的父亲分到的机器人的...

Sirius_han的博客 237

hdu4003Find Metal Mineral 树形dp+分组背包

//k个机器人从一颗树的树根开始往下走, //走树的每条边都要消耗能量,问这k个人最少花多少能量能遍历所有点 //dp[u][i] 表示以u点为根节点的子树用i个节点遍历最少需要多少能量 //当i = 0时表示有一个点遍历了这颗子树又返回上一个节点 #include<cstdio> #include<cstring> #include<iostream> #include<vector> using

ijbuhv的专栏 713

HDU4003 Find Metal Mineral(树形DP+分组背包)

Find Metal Mineral Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submission(s): 3163    Accepted Submission(s): 1460 Problem Description Humans ha

KeyboardPianist的博客 678

hdu 4003 Find Metal Mineral (树形dp+分组背包)

这道题有两种做法,但是都是树形dp+分组背包 思路1:逆向考虑。 参考:https://blog.youkuaiyun.com/shuangde800/article/details/10217167 #include&lt;bits/stdc++.h&gt; using namespace std; const int maxn=10010; int sum,cnt; int dp[maxn][20...

20164225的博客 363
上一篇: HDU 3001--Travelling(状态压缩+tsp)
下一篇: HDU 2196--Computer(树形dp)
Xcockroach
博客等级 码龄14年 4粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值