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

B站李沐讲论文笔记AlexNet 阅读详情

Find Metal Mineral

题目链接:

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

解题思路:

题目大意:

给你一棵n个节点的树, 节点编号为1~n, 每条边都有一个花费值。有k个机器人从S点出发, 问让机器人遍历所有边,最少花费值多少?

算法思想:

根据题意可以知道,机器人是可以走回头路的。所以分析下可知,如果从根节点派往子节点如果要折回到根节点,派向这个子节点

的机器人越多,产生的重复路径就会越多,所以那么派往这个子节点的个数为1时是最优策略。那么定义dp[i][0]存放1个机器人,从

子节点返回到根节点的花费。


现在思考:如果根节点s, 有 n个子节点,那么要怎么样选择才能使dp[s][k]的值最小呢?

⑴当机器人的个数为1时,那么只有一种方法,就是用这一个机器人跑遍每个子节点、也就是每次机器人都要从一个子节点返回根节

点,然后走向另一个节点,直到遍历所有点为止。那么这种状态下的状态转移为: dp[s][0]=dp[next][0]+2*w;       (其中s为根节点,

next为子节点,w为s到next的权值)。

⑵当机器人的个数>1时,那么必然存在机器人不必返回根节点的策略。同时由⑴也可以求出折回根节点的花费。

那么求根节点s下的n个子节点,把每个节点看做一个整体,定义dp(n,j)为前n个节点派j个机器人的最小花费,其实就是个包,dp(n,j)

与dp(n-1,j)必然存在某种联系。可以推出dp(n,j)=min(dp(n,j), dp(n-1,j-k)+dp[v][k]+k*w);  (1<=k<=j,w为s到当前这个子节点v的权值),

因为只要用到上一个子节点的状态。所以对起始点s的所有子节点扫描一遍就可以了。

AC代码:

#include <bits/stdc++.h>
using namespace std;

const int maxn = 10005;
struct node{
    int v,w;
    node(int _v,int _w):v(_v),w(_w){}
};
vector<node> path[maxn];
int dp[maxn][15];//节点i,向子节点放j个机器人的最小花费
int n,s,k;

void dfs(int u,int father){
    int len = path[u].size();
    for(int i = 0; i < len; i++){
        int next = path[u][i].v;
        int w = path[u][i].w;
        if(father == next)
            continue;                     //如果当前的节点为父亲节点,不往下走。

        if(father == -1 || father != next){//如果u为s点 (最上面的那个根节点)或者next不等于父亲节点
            //cout<<next<<" "<<u<<endl,
            dfs(next,u);
        }

        //cout<<next<<endl;
        for(int j = k; j >= 1; j--){
            dp[u][j] += dp[next][0] + 2*w;
            for(int jj = 1; jj <= j; jj++)
                dp[u][j] = min(dp[u][j],dp[u][j-jj]+dp[next][jj]+jj*w);

        }
        dp[u][0] += dp[next][0] + 2*w;
    }
}

int main(){
    while(~scanf("%d%d%d",&n,&s,&k)){
        for(int i = 0; i <= 10000; i++)
            path[i].clear();
        memset(dp,0,sizeof(dp));
        int u,v,w;
        for(int i = 0; i < n-1; i++){
            scanf("%d%d%d",&u,&v,&w);
            path[u].push_back(node(v,w));
            path[v].push_back(node(u,w));
        }
        dfs(s,-1);
        printf("%d\n",dp[s][k]);
    }
    return 0;
}


有关SPSS中Fisher精确检验无法进行的解决方法(由于无法打开临时文件,因此无法进行计算) 最近在帮一个四年生完成她的毕业论文,在用SPSS进行R×C表检验的时候,发现Fisher精确检验的结果无法显示,提示为“由于无法打开临时文件,因此无法进行计算”,大概像下图一样。 (这图是从网上找的) 然... 阅读详情

相关推荐

安卓模拟器绕过检测全解析:雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南

随着手机游戏和应用的普及,越来越多的用户选择在PC上通过模拟器来运行安卓应用。然而,许多应用和游戏为了防止作弊或出于安全考虑,会检测是否运行在模拟器环境中。本文将详细介绍各大主流模拟器的检测绕过方法,帮助用户在电脑上流畅体验各类安卓应用。1. 获取模拟器系统镜像2. 使用ROM厨房工具修改系统文件3. 替换模拟器的系统镜像雷电模拟器:适合游戏,推荐使用MAGISK + EdXposed方案MuMu模拟器:适合中度游戏,推荐太极框架蓝叠模拟器:适合国际应用,推荐MAGISK方案逍遥模拟器。

专注技术分享 3万+

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

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

一只酷酷光儿的博客 617

大模型面试题52:LLM如果在训练过程中loss值出现spike应该怎么办?

小白急救:停更→回滚→降LR→裁剪梯度,先保住训练不崩溃;进阶排查:查数据→查优化器→查硬件,找到spike的根因并解决;深层预防:预处理保守配置+训练中实时监控,从源头规避spike。先止损,再溯源,最后预防。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1168

Find Metal Mineral HDU - 4003 (树形DP)

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

Sirius_han的博客 237

DDR4/LPDDR4与DDR5/LPDDR5的差别

最新的 DDR5 可支持单一芯片容量 64Gbit,最高容量上限可增加到 128GB,较 DDR4 提高了四倍;价格:随着规格提升,DDR5 价格也较 DDR4 高出逾 50%,可能成为业者导入的阻碍。但如前所述,包括 5G、机器学习(ML)等各式进阶应用中,DDR5 的整体效能、规格的提升,对相关业者来说仍具一定优势与吸引力。电源管理 IC(PMIC IC):电源管理芯片内建至 DDR5 内存中,除可提高讯号完整性及噪声辨识能力,还能更具效率与扩展性;DDR5 规格与效能整理。(来源:JEDEC)

flomingo1的专栏 9011

Zemax物理光学实战:3分钟搞定高斯光束传播模拟(附菲涅尔局部分析技巧)

本文详细介绍了在Zemax中进行高斯光束传播模拟与菲涅尔局部分析的实战技巧。通过3分钟快速设置指南和参数解析,帮助光学工程师准确模拟激光光束特性,避免常见误区。特别分享了菲涅尔局部分析的关键技巧和传播参数优化策略,提升光学系统设计的精度与效率。

lambda的博客 804

Find Metal Mineral

/* 题目类型: 树形DP 题意: 是求k个机器人从S 点开始历遍所有节点的最小代价。 原理: 1)对于每一个节点, 分别求出当前节点有x(x = 0)个机器人进行历遍时的最小代价(这x个机器人会留在该分支)。 2)当有机器人留在这个节点下的分支时,则不会有让任何机器人从该节点出来。因为出来机器人的所历遍的节点或分支完全可以由留在这个节点的机器人来历遍,而且所花费

1201

时序分析-由D触发器结构来理解Tsu、Th

FPGA逻辑单元内的D触发器(D-FF)是一种在时钟的上升沿(或下降沿)将输入信号的变化传送至输出的边沿触发器。 数字电子技术基础-闫石(第五版)边沿D触发器内部结构见下图: 而FPGA原理与结构(日)一书中,内部结构较之上图多了俩反相器: 由传输门和俩个反相器组成一个循环电路(锁存器),再由前后两级锁存器按主从结构链接而成。这里的传输门起开关作用,随着CLK的状态变化切换开关。只看输出的话,前级锁存器的值会随着时钟输入的变化井然有序地传入后级锁存器。为了防止时钟信号变化时输入信号发生冒险,从而使稳定.

XY_Chang的博客 3969

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

Mac Pro M2芯片成功安装麒麟银河高级服务器虚拟机

本人用的是1、Macbook m2pro芯片 16G+5123、安装homebrew、wegt、qemu。

vagatable_XX的博客 3295

社交媒体文章内容与评论抓取:Python 爬虫实战教程

通过本文的介绍,我们学习了如何使用 Python 编写爬虫,抓取社交媒体平台的文章内容和评论。我们详细介绍了如何使用requestsSelenium和Tweepy等工具,抓取微博和 Twitter 上的公开数据。同时,我们还讨论了如何处理反爬虫机制,避免账号或 IP 被封禁。抓取社交媒体数据是一个充满挑战和乐趣的过程,掌握这些技术后,你可以在大数据分析、情感分析和舆情监测等方面得到更深层次的应用。

2201_76125261的博客 1708

HDU4003 树形DP

题意 :给一棵n个节点的树, 节点编号为1~n, 每条边都有一个花费值. 有k个机器人从S点出发, 问让机器人遍历所有边,最少花费值多少? 这题最难的地方应该就是如何定义状态了 定义dp[u][i]表示遍历完以u为根的子树的所有边时 使用i个机器人并且这i个机器人都不回到u的最小代价 注意一点 有一种情况,这颗子树上最后没有机器人停留 也就是需要其他子树上面的机器人进去然后...

weixin_30410119的博客 124

五种音频器件综合对比——《器件手册--音频器件》

音频器件当在蜂鸣片的两片电极之间接通交流音频信号时,蜂鸣片会根据信号的大小和频率发生振动,从而产生相应的声音。结构简单、造价低廉。广泛应用于玩具、电子表、电子仪器、电子钟表、定时器等电子电器方面。蜂鸣器是一种一体化结构的电子讯响器,采用直流电源供电,广泛应用于各种电子产品中作发声器件有源蜂鸣器:内部带震荡源,通电即发声,程序控制方便。无源蜂鸣器:内部不带震荡源,需用方波驱动,声音频率可控,价格相对便宜。计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品。

XU157303764的博客 1534

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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 567

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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的博客 677

hdu4003 Find Metal Mineral(树形dp+分组背包思想)

题目 n(n<=1e4)个点的树,每条边有一个边权w(w<=1e4),通过其的代价为其权值 你有k(k<=10)个机器人,所有机器人从给定的源点s(1<=s<=n)出发,你可以控制机器人的移动 求机器人访问所有点时,其最小的边权代价总和,输出代价总和 1<=N<=10000, 1<=S<=N, 1<=k<=10, 1<=x, y<=N, 1<=w<=10000. 思路来源 https://www.cnblo

小衣同学的博客 398

hdu4003Find Metal Mineral 树形dp+分组背包

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

ijbuhv的专栏 713

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): 2423    Accepted Submission(s): 1103 Problem Description Humans

ACway的专栏 787

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

Find Metal Mineral 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4003 题意: 有一棵树(存在N个节点),树上每条边都有权值,在其根节点S上有K个机器人,求这些机器人遍历所有点所花费的最小权值和 题解: 设dp[i][j]为以i为根节点的子树上有X个机器人的最小花费,按分组背包的思想跑一遍DP...

weixin_30235225的博客 157

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): 2503    Accepted Submission(s): 1133 Problem Description Humans

smz436487的专栏 529

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

题意:给你n个点,n - 1条边,k个机器人,s为起点,问遍历所有点的最小花费。 ———————————————————————————————————————————————— 【转载】: dp[i][j]表示对于以i结点为根结点的子树,放j个机器人所需要的权值和。  当j=0时表示放了一个机器人下去,遍历完结点后又回到i结点了。状态转移方程类似背包  如果最终的状态中以i为根结点

ACM征途 406

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): 1441    Accepted Submission(s): 631 Problem Description Humans have discov...

weixin_34150224的博客 74

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

题目链接 很棒的一个树形DP。学的太渣了。 1 #include <cstdio> 2 #include <string> 3 #include <cstring> 4 #include <iostream> 5 #include <algorithm> 6 using namespace std; 7 ...

weixin_30644369的博客 81
上一篇: hdu 1520 Anniversary party(树形dp)
下一篇: POJ 2486 Apple Tree(树形dp)
yphacker
博客等级 码龄12年 199粉丝 540原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值