hihocoder:#1055 : 刷油漆
来源:互联网 发布:淘宝蝶恋花亚麻线 编辑:程序博客网 时间:2024/04/28 16:36
- 样例输入
10 4370 328 750 930 604 732 159 167 945 210 1 22 31 41 54 64 74 86 95 10
- 样例输出
2977
描述
上回说到,小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不同的数字,并且这些数字都是处于1..N的范围之内,每根木棍都连接着两个不同的小球,并且保证任意两个小球间都不存在两条不同的路径可以互相到达。没错,这次说的还是这棵树玩具的故事!
小Ho的树玩具的质量似乎不是很好,短短玩了几个星期,便掉漆了!
“简直是一场噩梦!”小Ho拿着树玩具眼含热泪道。
“这有什么好忧伤的,自己买点油漆刷一刷不就行了?”小Hi表示不能理解。
“还可以这样?”小Ho顿时兴高采烈了起来,立马跑出去买回来了油漆,但是小Ho身上的钱却不够——于是他只买回了有限的油漆,这些油漆最多能给M个结点涂上颜色,这就意味着小Ho不能够将他心爱的树玩具中的每一个结点都涂上油漆!
小Ho低头思索了半天——他既不想只选一部分结点补漆,也不想找小Hi借钱,但是很快,他想出了一个非常棒的主意:将包含1号结点的一部分连通的结点进行涂漆(这里的连通指的是这一些涂漆的结点可以互相到达并且不会经过没有涂漆的结点),然后将剩下的结点拆掉!
那么究竟选择哪些结点进行涂漆呢?小Ho想了想给每个结点都评上了分——他希望最后留下来,也就是涂漆了的那些结点的评分之和可以尽可能的高!
那么,小Ho该如何做呢?
提示一:树上的动态规划?其实老早就接触过了吧!
输入
每个测试点(输入文件)有且仅有一组测试数据。
每组测试数据的第一行为两个整数N、M,意义如前文所述。
每组测试数据的第二行为N个整数,其中第i个整数Vi表示标号为i的结点的评分
每组测试数据的第3~N+1行,每行分别描述一根木棍,其中第i+1行为两个整数Ai,Bi,表示第i根木棍连接的两个小球的编号。
对于100%的数据,满足N<=10^2,1<=Ai<=N, 1<=Bi<=N, 1<=Vi<=10^3, 1<=M<=N
小Hi的Tip:那些用数组存储树边的记得要开两倍大小哦!
输出
对于每组测试数据,输出一个整数Ans,表示使得涂漆结点的评分之和最高可能是多少。
#include<bits/stdc++.h>using namespace std;int a[1000],v[1000];int d[2000][200];vector<int>e[1000];int dfs(int k,int m){ if(m<0)return 0; if(d[k][m])return d[k][m]+a[k]; //如果之前遍历过且把结果存下来了 v[k]=1; for(int i=0;i<e[k].size();i++) { int nex=e[k][i]; if(v[nex])continue; //避免回到父亲节点 for(int j=m;j>=0;j--) //DP { for(int l=j;l>=0;l--)d[k][j]=max(d[k][j],d[k][j-l]+dfs(nex,l-1)); } } v[k]=0; return d[k][m]+a[k];}int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++)scanf("%d",&a[i]); for(int i=1;i<=n;i++)e[i].clear(); for(int i=1,x,y;i<n;i++) { scanf("%d%d",&x,&y); e[x].push_back(y); e[y].push_back(x); } memset(v,0,sizeof v); memset(d,0,sizeof d); cout<<dfs(1,m-1)<<endl; return 0;}
- hihoCoder 1055 刷油漆
- hihocoder:#1055 : 刷油漆
- hihocoder#1055之刷油漆
- hihocoder 1055 刷油漆(树形DP+背包)
- hihocoder 1055 刷油漆(树形dp)
- hihocoder-1055 刷油漆(树形DP)
- hihocoder #1055 : 刷油漆(树形dp)
- hihocoder 1055 刷油漆 (树型dp)
- hihocoder 1055 : 刷油漆(树状dp)
- hihocoder - 第十二周 - 刷油漆
- hihocoder第十二周刷油漆
- HihoCoder第十二周:刷油漆
- hihocoder#1055 : 刷油漆 算法详解以及java源码实现
- hiho#1055 : 刷油漆
- #1055 : 刷油漆
- 刷油漆
- HIHO #1055 : 刷油漆(树形dp 入门)
- 格子刷油漆
- 283. Move Zeroes
- POJ-2253-Frogger [最短路][Dijkstra]
- 同步方法(非静态)
- hpuoj【1187】영어【字符串】
- 数据结构学习笔记
- hihocoder:#1055 : 刷油漆
- 泛型
- python json写入txt中文乱码
- 栈实现计算器四则运算+一个任意两个超大位数加法
- WebRTC各种资料
- 最近的一些计划
- socketIO服务器,安卓,js端使用代码
- 几篇有关CSS的文章
- 解决maven删除和重新安装的问题