HDU 4003 Find Metal Mineral(树形dp,从根节点出发k个机器人遍历所有边的最小代价和)
来源:互联网 发布:软件测试目的 编辑:程序博客网 时间:2024/06/11 02:00
题目链接;
HDU 4003 Find Metal Mineral
题意:
给一个
数据范围:
分析;
树形dp。
其实,我觉得能够定义合适的状态,问题就解决了一半了。
因为一个机器人遍历完一颗子树可能返回到父亲节点,所以我定义
但是要考虑到可能对于一颗子树他独自用到的机器人是0个,其实这就可以用
接下来考虑状态转移。我们对于节点
首先从
枚举
需要注意
答案就是
时间复杂度:
#include <stdio.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;typedef long long ll;const int MAX_N = 10010;const int MAX_K = 15;int n, root, total, K;int head[MAX_N];ll dp[MAX_N][MAX_K];struct Edge { int v, w, next;}edge[MAX_N * 2];void AddEdge(int u, int v, int w){ edge[total].v = v; edge[total].w = w; edge[total].next = head[u]; head[u] = total++;}void wyr(int u, int p){ for (int id = head[u]; id != -1; id = edge[id].next) { int v = edge[id].v, w = edge[id].w; if (v == p) continue; wyr(v, u); for (int i = K; i >= 0; --i) { dp[u][i] += dp[v][0] + 2 * w; for (int j = 1; j <= i; ++j) { dp[u][i] = min(dp[u][i], dp[v][j] + dp[u][i - j] + j * w); } } }}int main(){ while (~scanf("%d%d%d", &n, &root, &K)) { memset(head, -1, sizeof(head)); total = 0; for (int i = 1; i < n; ++i) { int u, v, w; scanf("%d%d%d", &u, &v, &w); AddEdge(u, v, w); AddEdge(v, u, w); } memset(dp, 0, sizeof(dp)); wyr(root, -1); printf("%lld\n", dp[root][K]); } return 0;}
0 0
- HDU 4003 Find Metal Mineral(树形dp,从根节点出发k个机器人遍历所有边的最小代价和)
- 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+分组背包)
- 中软Java学习第八天笔记之队列和栈
- 打开目录,读取目录 ,然后获得文件状态
- 数据结构实验之排序二:交换排序
- 异步 Notification 之 NSNotificationQueue
- java-反射
- HDU 4003 Find Metal Mineral(树形dp,从根节点出发k个机器人遍历所有边的最小代价和)
- A. Cards
- 占座
- 中软第八天学习笔记之ArrayList
- DataGridView右键删除行
- Android之十七 进度条和Hanlder
- 初学HTML5--新增标签
- 搜索引擎学习
- 欢迎使用CSDN-markdown编辑器