HDU 4003-Find Metal Mineral(树状背包)
2024-10-18 15:19:39
题意:
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 = ;
struct tree{
int u,v,next,cost;
}t[];
int dp[][],n,k,s,used[],head[],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]=;
for(int i=head[root];i!=-;i=t[i].next){
int son=t[i].v;
if(used[son])continue;
dfs(son);
for(int j=k;j>=;j--)
for(int l=;l<=j;++l)
dp[root][j]=max(dp[root][j],dp[root][j-l]+dp[son][l]+(-l)*t[i].cost);//l个机器人过这个边,减少的花费(2-l)*t[i].cost
}
}
int main()
{
while(~scanf("%d%d%d",&n,&s,&k)){
memset(dp,,sizeof(dp));
memset(used,,sizeof(used));
memset(head,-,sizeof(head));
int a,b,c,sum=;
len=;
for(int i=;i<n-;++i){
scanf("%d%d%d",&a,&b,&c);
sum+=c;
add(a,b,c);
add(b,a,c);
}
dfs(s);
printf("%d\n",*sum-dp[s][k]);
}
return ;
}
最新文章
- Demo中的IOC自定义实现
- WebForm Repeater: 重复器
- 期许伟大-基于CMMI的过程改进之道探索
- 2013级软件工程GitHub账号信息
- HTML 事件属性(下)
- 重写ScrollView 解决ScrollView嵌套viewpager事件冲突
- aidl 中通过RemoteCallbackList 运用到的回调机制: service回调activity的方法
- office-002-onenote、word、outlook取消首字母大小写图文详解
- 配置Symfony2
- 利用map可以对很大的数出现的次数进行记数
- [Objective-c 基础 - 1.1] OC类
- 移动端web学习总结
- 移动端 设置 小于12px 字体 初探
- Delphi ControlCount和ComponentCount的区别
- ice grid配置使用第二篇------实际使用
- python———day04
- JS变量声明方式
- Node.js 中使用 ES6 中的 import / export 的方法大全
- Spring-Cloud之Eureka排坑之旅
- git将本地内容传送到远程仓库出现![rejected] master ->; master (fetch first)错误
热门文章
- Objective-C中的数据类型、常量、变量、运算符与表达式
- Get the item a SharePoint workflow task is associated with
- MySQL分区表(转)
- 【C++基础】内存操作 getMemory改错
- 强大的CImage类
- jmeter 响应结果分析二
- IOS 系统API---NSJSONSerialization四个枚举什么意思
- jstack(查看线程)、jmap(查看内存)和jstat(性能分析)
- [Unity菜鸟] 协程Coroutine
- 分布式java应用