HDU 4003 Find Metal Mineral 树形DP
来源:互联网 发布:淘宝买伟哥 编辑:程序博客网 时间:2024/04/18 02:37
题意:人类在火星上发现一个金属矿。金属矿的道路是个树形的。在每个叶子节点有矿。现在从根结点S派出K个机器人,去取所有叶子节点的矿,希望所有机器人走的距离之和最短。
思路:通过模拟可以发现,影响状态的是,有几个机器人最终留在了以u为根的子树中。
所以,定义状态dp[u][j]为以u为根的子树,最终有j个机器人留在了该子树中,所有机器人走的距离之和的最小值。
下面考虑状态转移:
1.没有机器人留在子树中
2.有机器人留在子树中
最后的答案就是dp[S][K]
代码如下:
#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int MAX = 10010;struct edge{ int to,w; edge(){} edge(int t, int ww):to(t),w(ww){}} edges[MAX<<1];int N,S,K;int nxt[MAX<<1],head[MAX],tot;int dp[MAX][20];void init(){ memset(head,-1,sizeof(head)); memset(dp,0,sizeof(dp)); tot = 0;}void addedge(int u, int v, int w){ edges[tot] = edge(v,w); nxt[tot] = head[u]; head[u] = tot++;}void dfs(int u, int p){ for(int i = head[u]; ~i; i = nxt[i]){ edge & e = edges[i]; if(e.to == p) continue; dfs(e.to,u); for(int j = K; j >= 0; --j){ dp[u][j] += dp[e.to][0] + e.w * 2; for(int k = 1; k <= j; ++k) dp[u][j] = min(dp[u][j],dp[e.to][k] + dp[u][j-k] + k * e.w); } }}int main(void){ //freopen("input.txt","r",stdin); while(~scanf("%d%d%d",&N,&S,&K)){ init(); for(int i = 1; i <= N - 1; ++i){ int u,v,w; scanf("%d%d%d",&u,&v,&w); addedge(u,v,w); addedge(v,u,w); } dfs(S,0); printf("%d\n",dp[S][K]); } return 0;}
0 0
- HDU 4003 Find Metal Mineral 树形DP
- hdu 4003 Find Metal Mineral 树形DP
- HDU-4003 Find Metal Mineral 树形dp
- HDU 4003--Find Metal Mineral(树形dp)
- hdu 4003 Find Metal Mineral (树形背包dp)
- hdu 4003 Find Metal Mineral (树形dp+分组背包)
- hdu 4003 Find Metal Mineral (树形dp)
- hdu 4003 Find Metal Mineral(树形DP)
- hdu 4003 Find Metal Mineral 【树形dp,分组背包】
- hdu 4003 Find Metal Mineral(树形DP+分组背包)
- hdu 4003 Find Metal Mineral 树形dp+分组背包
- hdu 4003 Find Metal Mineral (树形dp+背包)
- hdu 4003 Find Metal Mineral(树形dp+分组背包)
- HDU 4003 Find Metal Mineral (树形dp)
- HDU 4003 Find Metal Mineral (树形dp)
- HDU 4003 Find Metal Mineral(树形dp + 分组背包)
- hdu 4003 Find Metal Mineral(树形dp+分组背包)
- HDU 4003 Find Metal Mineral (树形DP+分组背包)
- OC中Block的使用
- Java中Set的使用
- 致IT同仁 — IT人士常犯的17个职场错误
- OC——copy语法的基本使用
- Yii登陆添加验证码
- HDU 4003 Find Metal Mineral 树形DP
- Android 一步一步实现版本自动更新(第二步 下载和安装apk)
- Android中的Handler的具体用法
- Leetcode: Combination Sum II
- 灰度图像--图像分割 阈值处理综述
- Pro Android学习笔记(八九):了解Handler(3):延迟执行小例子
- 线程的状态间转换
- 控制台输入响应
- 使用Android Studio遇到的问题