题目大意:

0~n-1号这n个点,每个点有个权值,由无向边形成了一棵树,希望在这棵树上找到一棵长为m的子树使总的权值最小

基本的树形背包问题

令dp[u][j] 表示u号节点对应子树中有j个节点所能得到的最大权值

dp[u][1] = val[u]

dp[u][j] = max{dp[v][k] + dp[u][j-k]} j>1  1=<k<j

我们通过dfs自底向上更新

在dfs过程中建立一个 j ,k 的循环即可

我一开始想的时候认为这个只做到了 u 的下方考虑,如果所得到的子树是要往u的上方走怎么办,想着自顶向上多一次dfs,然后就再也想不出来了- -

其实后来想想却发现如果要往上走,那么就得到的是以走到最上方的那个节点所形成的子树,那个值也已经在dp数组中保存了,不用我多去考虑了

 #include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; const int N = ;
int first[N] , k , val[N] , dp[N][N]; struct Edge{
int y , next;
}e[N<<]; void add_edge(int x , int y)
{
e[k].y = y , e[k].next = first[x];
first[x] = k++;
} void dfs(int u , int fa , int m)
{
dp[u][] = val[u];
for(int i = first[u] ; i!=- ; i=e[i].next)
{
int v = e[i].y;
if(v == fa) continue;
dfs(v , u , m);
for(int j = m ; j>= ; j--){
for(int k= ; k<j ; k++)
dp[u][j] = max(dp[u][j] , dp[v][k] + dp[u][j-k]);
}
}
} int main()
{
// freopen("a.in" , "r" , stdin);
int n , m , x , y;
while(scanf("%d%d" , &n , &m)==){
for(int i = ; i<n ; i++)
scanf("%d" , val+i); memset(first , - , sizeof(first));
k=;
for(int i= ; i<n ; i++){
scanf("%d%d" , &x , &y);
add_edge(x , y);
add_edge(y , x);
} memset(dp , , sizeof(dp));
dfs( , - , m); int maxn = ;
for(int i= ; i<n ; i++){
maxn = max(maxn , dp[i][m]);
}
printf("%d\n" , maxn);
}
return ;
}

最新文章

  1. ABP框架理论学习之后台工作(Jobs)和后台工作者(Workers)
  2. 06Mybatis_入门程序——根据用户的名字模糊查询返回List集合
  3. js对象的两种写法
  4. JS模态窗口返回值兼容问题解决方案
  5. C#时间格式化(Datetime)用法详解
  6. Redis实践操作之—— keyspace notification(键空间通知)
  7. 50个Android开发人员必备UI效果源码[转载]
  8. SQL2012 附加数据库提示5120错误解决方法
  9. 规则引擎-BRMS在企业开发中的应用
  10. 395. Coins in a Line II
  11. UCOS 信号量
  12. 配置Raspbian 启用SPI I2C
  13. Qt之新手打包发布程序
  14. 为什么很多第三方接口,都改成了基于http,直接传递json数据的方式来代替webservice?
  15. 我的emacs考场配置
  16. SpringCloud的Hystrix(二) 某消费者应用(如:ui、网关)访问的多个微服务的断路监控
  17. H5播放器内置播放视频(兼容绝大多数安卓和ios)
  18. 状态模式-State Pattern(Java实现)
  19. 19 个常用的 JavaScript 简写方法
  20. c# Session写入读取操作

热门文章

  1. jsonp 监控简陋代码
  2. Windows 7上安装Microsoft Loopback Adapter(微软环回网卡)
  3. [转]MVC之 自定义过滤器(Filter)
  4. java 利用Xstream注解生成和解析xml
  5. OKHTTP 简单分析
  6. C++(extern关键字的理解和作用深入)
  7. MyBatis 之一 简介
  8. nginx_gzip压缩提升网站的传输速度
  9. Java基础(九)--反射
  10. spring思想分析