题意:

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 ;
}

最新文章

  1. Demo中的IOC自定义实现
  2. WebForm Repeater: 重复器
  3. 期许伟大-基于CMMI的过程改进之道探索
  4. 2013级软件工程GitHub账号信息
  5. HTML 事件属性(下)
  6. 重写ScrollView 解决ScrollView嵌套viewpager事件冲突
  7. aidl 中通过RemoteCallbackList 运用到的回调机制: service回调activity的方法
  8. office-002-onenote、word、outlook取消首字母大小写图文详解
  9. 配置Symfony2
  10. 利用map可以对很大的数出现的次数进行记数
  11. [Objective-c 基础 - 1.1] OC类
  12. 移动端web学习总结
  13. 移动端 设置 小于12px 字体 初探
  14. Delphi ControlCount和ComponentCount的区别
  15. ice grid配置使用第二篇------实际使用
  16. python———day04
  17. JS变量声明方式
  18. Node.js 中使用 ES6 中的 import / export 的方法大全
  19. Spring-Cloud之Eureka排坑之旅
  20. git将本地内容传送到远程仓库出现![rejected] master -&gt; master (fetch first)错误

热门文章

  1. Objective-C中的数据类型、常量、变量、运算符与表达式
  2. Get the item a SharePoint workflow task is associated with
  3. MySQL分区表(转)
  4. 【C++基础】内存操作 getMemory改错
  5. 强大的CImage类
  6. jmeter 响应结果分析二
  7. IOS 系统API---NSJSONSerialization四个枚举什么意思
  8. jstack(查看线程)、jmap(查看内存)和jstat(性能分析)
  9. [Unity菜鸟] 协程Coroutine
  10. 分布式java应用