HDU 4003-Find Metal Mineral(树状背包)
2015-08-03 10:27
246 查看
题意:
n个节点的树给出每个边的权值,有k个机器人,求由机器人走完所有节点的最小花费(所有机器人开始在根节点)
分析:
仔细看了几遍例题后,发现这个题的状态很巧妙,先从整体考虑,一个机器人走完所有边回到根,是所有边权值和的2倍,
对于k个机器人,有的就不用回根,dp[i][j],以i为根的子树,用机器人数j最多可以减少的花费,最后2*sum-dp[s][k]即为所求。
n个节点的树给出每个边的权值,有k个机器人,求由机器人走完所有节点的最小花费(所有机器人开始在根节点)
分析:
仔细看了几遍例题后,发现这个题的状态很巧妙,先从整体考虑,一个机器人走完所有边回到根,是所有边权值和的2倍,
对于k个机器人,有的就不用回根,dp[i][j],以i为根的子树,用机器人数j最多可以减少的花费,最后2*sum-dp[s][k]即为所求。
#include <map> #include <set> #include <list> #include <cmath> #include <queue> #include <stack> #include <cstdio> #include <vector> #include <string> #include <cctype> #include <complex> #include <cassert> #include <utility> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> using namespace std; typedef pair<int,int> PII; typedef long long ll; #define lson l,m,rt<<1 #define pi acos(-1.0) #define rson m+1,r,rt<<11 #define All 1,N,1 #define read freopen("in.txt", "r", stdin) const ll INFll = 0x3f3f3f3f3f3f3f3fLL; const int INF= 0x7ffffff; const int mod = 1000000007; struct tree{ int u,v,next,cost; }t[20010]; int dp[10010][15],n,k,s,used[10010],head[10010],len; void add(int a,int b,int c){ t[len].u=a; t[len].v=b; t[len].cost=c; t[len].next=head[a]; head[a]=len++; } void dfs(int root){ used[root]=1; for(int i=head[root];i!=-1;i=t[i].next){ int son=t[i].v; if(used[son])continue; dfs(son); for(int j=k;j>=1;j--) for(int l=1;l<=j;++l) dp[root][j]=max(dp[root][j],dp[root][j-l]+dp[son][l]+(2-l)*t[i].cost);//l个机器人过这个边,减少的花费(2-l)*t[i].cost } } int main() { while(~scanf("%d%d%d",&n,&s,&k)){ memset(dp,0,sizeof(dp)); memset(used,0,sizeof(used)); memset(head,-1,sizeof(head)); int a,b,c,sum=0; len=0; for(int i=0;i<n-1;++i){ scanf("%d%d%d",&a,&b,&c); sum+=c; add(a,b,c); add(b,a,c); } dfs(s); printf("%d\n",2*sum-dp[s][k]); } return 0; }
相关文章推荐
- Linux中ethtool工具的使用
- p1011
- android 混淆
- jabref文献管理格式
- oracle_Listener in INTERMEDIATE status with "Not All Endpoints Registered"
- 南邮 OJ 1019 计算二叉树的高度和结点数
- 技术文章
- Git的好伙伴:SourceTree & BeyondCompare
- 使用logback处理程序日志信息-logback的基本配置与使用
- 观察者模式
- 二叉树的简单创建与三中遍历
- 【Android】TypedArray和obtainStyledAttributes使用(R.styleable.xx_xx)
- 匿名内部类
- 简单区分Jxl和POI的不同之处
- spark streaming原理
- Java面向对象纪要
- jQuery动态添加的元素中处理字符串溢出后在指定字符数后添加省略号
- ArcGIS中的标注和注记
- 自绘制View---------原型旋转刻度调频View
- spark streaming原理