hdu4003】的更多相关文章

Two Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 1390   Accepted: 701 Description The city consists of intersections and streets that connect them. Heavy snow covered the city so the mayor Milan gave to the winter-service a list of st…
题目大意:用m个机器人去遍历有n个节点的有根树,边权代表一个机器人通过这条边的代价,求最小代价. 题目分析:定义状态dp(root,k)表示最终遍历完成后以root为根节点的子树中有k个机器人时产生的总代价.则状态转移方程为: dp(root,k)=min(dp(root,k),dp(son,j)+dp(root,k-j)+j*w(root,son))  j>0 要注意,当j为0的时候表示遍历完son这个子树后所有的机器人都回到root.可以证明,如果让遍历son的所有的机器人都回到root,那…
Find Metal Mineral 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 robots on Mars to collect them, and du…
看别人思路的 树形分组背包. 题意:给出结点数n,起点s,机器人数k,然后n-1行给出相互连接的两个点,还有这条路线的价值,要求最小花费 思路:这是我从别人博客里找到的解释,因为很详细就引用了 dp[i][j]表示对于以i结点为根结点的子树,放j个机器人所需要的权值和. 当j=0时表示放了一个机器人下去,遍历完结点后又回到i结点了.状态转移方程类似背包 如果最终的状态中以i为根结点的树中有j(j>0)个机器人,那么不可能有别的机器人r到了这棵树后又跑到别的树中去 因为那样的话,一定会比j中的某一…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 题意:给定一棵n个节点的树,遍历每条数边都需要费用cost,现在给定k个机器人,要求用这个k个机器人遍历整棵树,使得经过的费用和最小,n<=10000. 分析:dp[u][j]表示有j个机器人不回来的最小值,dp[u][0]表示有一个机器人回来的最小值,即没有一个机器停留在那颗子树上.至于为甚么只考虑一个机器人回来的原因是同时派多个机器人下去,如果回来的人越多,走重复路线会越多,耗费越多. 这…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 Find Metal Mineral Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Submission(s): 4490    Accepted Submission(s): 2071 Problem Description Humans have discov…
/*依赖背包的通常做法就是对于每个结点,先处理处其所有子节点的dp,然后对于当前结点进行分组背包dp即可 还是依赖背包问题,dp[i][j]表示结点i的子树用了j个机器人的搜索代价 边界条件,如果某个结点的子树用了0个机器人,那么搜索这个棵子树的代价是边权和*2 将每个结点子树中的机器人看做物品体积,搜索代价看做价值,求最小价值 */ #include<bits/stdc++.h> using namespace std; <<]; ],tot,dp[][],n,s,k; ,;}…
题意 :给一棵n个节点的树, 节点编号为1~n, 每条边都有一个花费值.        有k个机器人从S点出发, 问让机器人遍历所有边,最少花费值多少? 这题最难的地方应该就是如何定义状态了 定义dp[u][i]表示遍历完以u为根的子树的所有边时 使用i个机器人并且这i个机器人都不回到u的最小代价 注意一点 有一种情况,这颗子树上最后没有机器人停留 也就是需要其他子树上面的机器人进去然后再出来, 进去的机器人数目肯定是1个这个是显然的于是用dp[u][0]表示这个状态 所以u->v这条边走了两次…
思路: 树形dp + 分组背包dp. 参考https://www.cnblogs.com/kuangbin/archive/2012/08/29/2661928.html 实现: #include <bits/stdc++.h> using namespace std; typedef pair<int, int> pii; ; vector<pii> G[MAXN]; ], n, s, k; void dfs(int u, int f) { ; i < G[u]…
题目大意:给定一棵 N 个节点的有根树,边有边权,在根结点处有 K 个人,这些人会遍历树上的所有边,求如何遍历才能使得所有人走过路径的边权和最小. 题解: 引理:对于一棵子树来说,若存在 M>0 个人最后停留在这棵子树内,则对于最优情况来说,来到过这棵子树的人也只能是 M 个,即:不会存在第 M+1 个人来到该子树,再回到其父节点的情况. 证明:若存在第 M+1 个人来到了这棵子树,并走了一条路径 P,最后回到子树根节点的父节点.我们可以在 [1,M] 中任意选择一个人,先走与这个人相同的路径…
题意:给出n个点的一棵树,有k个机器人,机器人从根节点rt出发,问访问完整棵树(每个点至少访问一次)的最小代价(即所有机器人路程总和),机器人可以在任何点停下. 解法:这道题还是比较明显的能看出来是树形DP,然后分配机器人肯定想到树形分组背包DP.那么dp方程和常规树形背包dp一样很容易些 dp[x][i]=min(dp[x][i],dp[y][j]+val(y,j)+dp[x][i-j]) 代表总共i个机器人给当前子树y分配j个机器人剩下的i-j个机器人分配给前几棵子树的最小代价.主要问题就是…
思维性比较强,代码挺简单的,dp[u][j]表示在u子树下安排j个机器人,让其不回u 注意转移时的初始值 /* dp[u][j]为在子树u有j个机器人不回来 */ #include<bits/stdc++.h> using namespace std; #define N 10005 ]; int head[N],tot,n,k,s; void init(){ memset(head,-,; } void add(int u,int v,int w){ e[tot].to=v;e[tot].w…
POJ2152 树形dp,每次先dfs一遍求出距离再枚举所有点转移即可. #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; inline int read() { ,f=; char ch=getchar(); ; ch=getchar();} +ch-'; ch=getcha…
TELE Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4957   Accepted: 2726 Description A TV-network plans to broadcast an important football match. Their network of transmitters and users can be represented as a tree. The root of the tre…
Find Metal Mineral Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Submission(s): 3397    Accepted Submission(s): 1588 Problem Description Humans have discovered a kind of new metal mineral on Mars which are d…
ACM训练计划建议 From:freecode#  Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜鸟之作,大牛勿喷,如有不当或补充之处,欢迎指出. 本建议书分为三个阶段,大一.大二.大三.大四暂没整理,一方面是大四要面临考验和找工作的问题,坚持继续acm的很少,另一方面,本人还没大四…… 下面以个人经验分析一下这三个阶段建议学习的内容和具体的训练计划. 正文: 大一(第一阶段): 大一是时间最充…
题目链接:http://poj.org/problem?id=1849 题意:有一颗n个结点的带权的无向树, 在s结点放两个机器人, 这两个机器人会把树的每条边都走一遍, 但是最后机器人不要求回到出发点. 问你两个机器人走的路总长之和的最小值是多少? 分析:如果从某点出发遍历完一棵树再回来,那么所有边都会走两遍,而从某点有两个机器人出发去遍历,因为不用回来,所以最后那两个人距离越远越好,可以从树的直径上某个点背道而驰,那么这段距离(树的直径)只走了一遍,其他的要走两遍,所以ans=sum*2-l…
ACM训练计划建议 From:freecode#  Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜鸟之作,大牛勿喷,如有不当或补充之处,欢迎指出. 本建议书分为三个阶段,大一.大二.大三.大四暂没整理,一方面是大四要面临考验和找工作的问题,坚持继续acm的很少,另一方面,本人还没大四…… 下面以个人经验分析一下这三个阶段建议学习的内容和具体的训练计划. 正文: 大一(第一阶段): 大一是时间最充…
[HDU4003]Find Metal Mineral Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Submission(s): 3686    Accepted Submission(s): 1723 Problem Description Humans have discovered a kind of new metal mineral on Mars wh…
题目链接:https://vjudge.net/problem/HDU-4003 题意:给一棵边权树,在树根s有m个人,要通过m个人遍历到所有点,一个人经过一条边花费为边的权值,求最小花费(可以走已经走过的边). 思路: 状态比较好想,用dp[u][j]表示在u结点的子树中有j个人的最小花费.但转移方程有点难想. 重要的是怎么处理dp[u][0],对dp[v][0],即在v结点的子树中有0个人的最小花费,那么只能通过v的父结点u过来机器人,假设来x个人,那这x个人在遍历v子树所有点之后还要回到u…