#1055 : 刷油漆

时间限制:10000ms

单点时限:1000ms

内存限制:256MB

描述

上回说到,小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,表示使得涂漆结点的评分之和最高可能是多少。

样例输入

10 4

370 328750 930 604 732 159 167 945 210

1 2

2 3

1 4

1 5

4 6

4 7

4 8

6 9

5 10

样例输出

2977

现在觉得,很多题都是见识过与没见识过的问题。没见识过的话,就不知道这种思路,想破天也很难做出来。见识过了,了解了这种思路了,那么下一次遇到这种题时会简单很多。

感悟:

1.觉得树中取最大连接的几个点那块用动态规划的思想很棒。

2.从0开始++不行的时候,试着换种思路,从最大值开始--,这种麻烦事碰到不是一次两次了,下把长点心。

这次代码完全自己写的,半夜一直调。。。看见AC的时候很惊讶,很有成就感。

代码:

#include <iostream>
#include <string>
#include <cstring>
#include <vector>
using namespace std; vector <int> dp[105];
int value[105]; int N,M;
int f[105][105];
int used[105]; void cal(int node)
{
used[node]=1; f[node][1]=value[node]; int count;
int m,m_child; for(count=0;count<dp[node].size();count++)
{
if(!used[dp[node][count]])
{
cal(dp[node][count]); for(m=M;m>=2;m--)
{
for(m_child=1;m_child<=m-1;m_child++)
{
f[node][m] = max(f[node][m],f[node][m-m_child]+f[dp[node][count]][m_child]);
}
}
}
} } int main()
{
cin>>N>>M;
int count;
for(count=1;count<=N;count++)
{
cin>>value[count];
}
for(count=0;count<N-1;count++)
{
int a,b;
cin>>a>>b; dp[a].push_back(b);
dp[b].push_back(a);
}
memset(used,0,sizeof(used));
cal(1); cout<<f[1][M]<<endl; return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

HihoCoder第十二周:刷油漆的更多相关文章

  1. 201521123061 《Java程序设计》第十二周学习总结

    201521123061 <Java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对 ...

  2. 201521123072《java程序设计》第十二周学习总结

    201521123072<java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象 ...

  3. 201521123038 《Java程序设计》 第十二周学习总结

    201521123038 <Java程序设计> 第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student ...

  4. 201521123122 《java程序设计》第十二周学习总结

    ## 201521123122 <java程序设计>第十二周实验总结 ## 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将St ...

  5. 201771010134杨其菊《面向对象程序设计java》第十二周学习总结

    第十二周学习总结 第一部分:理论知识 内容概要: AWT与Swing简介:框架的创建:图形程序设计: 显示图像: 1.AWT组件: 2.Swing 组件层次关系 3 .AWT与Swing的关系:大部分 ...

  6. C语言程序设计I—第十二周教学

    第十二周教学总结(19/11-25/11) 教学内容 第4章 循环结构 4.5 循环结构程序设计 课前准备 在蓝墨云班课发布资源: PTA:2018秋第十二周作业4.5 分享码:B7FA52A13B6 ...

  7. 第十二周作业_PSP总结报告

    回顾1 (1)回想一下你曾经对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 你认为过去接触到的课程是否符合你对计算机专业的期待,为什么?经过一个学 ...

  8. FromBottomToTop第十二周项目博客

    FromBottomToTop第十二周项目博客 本周项目计划 设计整体架构,收集素材,制作出静态界面部分 项目进展 已完成游戏整体架构设计 已完成游戏界面.背景音乐等素材的收集 正在进行静态界面部分的 ...

  9. 20155207JAVA第十二周课堂练习

    20155207JAVA第十二周课堂练习 教材代码检查--P98 修改教材P98 Score2.java, 让执行结果数组填充是自己的学号 Arrays和String单元测试 在IDEA中以TDD的方 ...

随机推荐

  1. flex布局(非常重要)

    首先明确一点是, flex 是 flex-grow.flex-shrink.flex-basis的缩写.故其取值可以考虑以下情况: flex 的默认值是以上三个属性值的组合.假设以上三个属性同样取默认 ...

  2. ORACLE A表字段更改为B表的字段

    UPDATE IM_PARA_CHECK_DATA_NEW A SET (OPERASTATE, COVER_TYPE, COVER_PRO, WORK_BAND, DEVICE_TYPE) =(SE ...

  3. 技术|Android安装包极限优化

    版权声明 1.本文版权归原作者所有,转载需注明作者信息及原文出处. 2.本文作者:赵裕(vimerzhao),永久链接:https://github.com/vimerzhao/vimerzhao.g ...

  4. vue基础语法摘要

    1. 2. 3. 4. 5. 6. 7.“动态路由”和“编程式路由”参数的接收方式:路由的参数-----页面之间跳转的参数

  5. centos6.5安装图形操作界面

    yum -y install xorg-x11-fonts-Type1 #安装Xwindow yum -y groupinstall "X Window System" #安装GN ...

  6. Centos7 忘记密码解决方法

    一.Centos7 忘记密码解决方法 1.进入单用户模型 重启 Linux 系统主机并出现引导界面时,按下键盘上的 e 键进入内核编辑界面 然后按向下键,找到以“Linux16”开头的行,在该行的最后 ...

  7. 服务端OLEVARIANT数据之后传输

    将OLEVARIANT数据流化,然后对流进行压缩,还原成OLEVARIANT以后再发送. procedure StreamToVariant(Stream: TStream; var V: OLEVa ...

  8. 解决请求中的post、get乱码问题以及响应的乱码问题

    post: get: response:

  9. project clean

    1.由于eclipse的编译是基于时间戳的判断机制的.因此当你按build all的时候有些eclipse认为时间戳没有改变的类不会被编译.因此你可以先clean一下再编译.这个时候eclipse会将 ...

  10. jqGrid 多选复选框 编辑列 方法事件

    参考:https://blog.csdn.net/zsq520520/article/details/53375284?locationNum=8&fps=1