结点选择(树形动态规划)C语言

问题描述

有一棵 n 个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少?

输入格式

第一行包含一个整数 n 。

接下来的一行包含 n 个正整数,第 i 个正整数代表点 i 的权值。

接下来一共 n-1 行,每行描述树上的一条边。

输出格式

输出一个整数,代表选出的点的权值和的最大值。

样例输入
5
1 2 3 4 5
1 2
1 3
2 4
2 5

样例输出
12

样例说明
选择3、4、5号点,权值和为 3+4+5 = 12 。

数据规模与约定

对于20%的数据, n <= 20。

对于50%的数据, n <= 1000。

对于100%的数据, n <= 100000。

权值均为不超过1000的正整数。


前面也说了,这道题笔者花了相当长的时间,但其实细究起来,最重要的就三个点:

1.建树
(但这道题并不是简单的单个头结点,每个结点只有一个父结点的那种普通的树,它实际是个无向图!)

2.递推式
(这个难度比较小),但是不太好解释 ,讲不清楚请原谅哈~~♪( ^ ∇ ^ *) ,直接写基本思路:

深度遍历每一个结点,每个结点都进行一次判断:
如果取这个结点,那么该结点的子结点就不取,如果不取该结点,那么它的子结点有两种情况:可以取,也可以不取!

于是有状态方程:

dp[x][0]表示x结点不选中时最大的权值,dp[x][1]表示x结点选中时最大的权值

状态转移方程:dp[x][1] = dp[x][1] + dp[u][0] (u为x的子结点)
       dp[x][0] = dp[x][0] + max{dp[u][0],dp[u][1]}(u为x的子结点)
      
(看不懂就多看几遍,自己纸上画一下,花点时间总是能懂的。)

3。树(无向图)的遍历
(事实上,树的遍历还是比较容易的,只要注意多叉树与二叉树之间的转换就很容易实现,祥见上一篇博客的代码(这几个字是链接))

但是!无向图的遍历就复杂了好多,这也是这篇博客的重点!!!

因为网上能找到的的代码基本都是千篇一律,但那段代码笔者是真的看不懂~~

但功夫不负有心人,我终于找到了一篇好东西!!

链式前向星https://blog.csdn.net/lala__lailai/article/details/79249809

以上为链接!

在这(两)位大佬的帮助下!笔者终于搞懂了这段神奇的代码!!

但是很显然这种算法笔者很难学得会呀~~呜呜呜…

哎,讲得乱七八糟的,希望读者大大们能看懂~~

看不懂就动笔一步一步跟着代码走,相信你一定会豁(jing)然(wei)开(tian)朗(ren)的~~

以上!

        </div><link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-258a4616f7.css" rel="stylesheet"></div>

蓝桥杯 算法训练(四)结点选择(树形动态规划)相关推荐

  1. [蓝桥杯][算法训练]K好数(动态规划)

    题目描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.20.22 ...

  2. [蓝桥杯][算法训练VIP]乘积最大(动态规划)

    题目描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一 ...

  3. 蓝桥杯算法训练 印章

    蓝桥杯 算法训练 印章 问题描述 ​ 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入格式 ​ 一行两个正整数n和m 输出格式 ​ 一个实数P表示答案,保 ...

  4. 蓝桥杯算法训练-强力党逗志芃

    持续更新蓝桥杯算法训练题解,有兴趣可以关注一波呀 题目 逗志芃励志要成为强力党,所以他将身上所以的技能点都洗掉了重新学技能.现在我们可以了解到,每个技能都有一个前提技能,只有学完了前提技能才能学习当前 ...

  5. 蓝桥杯 算法训练 强力党逗志芃

    蓝桥杯 算法训练 强力党逗志芃 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃励志要成为强力党,所以他将身上所以的技能点都洗掉了重新学技能.现在我们可以了解到,每个 ...

  6. 蓝桥杯算法训练-24点(Python)

    问题描述 24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用数学中的加.减.乘.除以及括号想办法得到24, ...

  7. 蓝桥杯 算法训练 逗志芃的危机

    蓝桥杯 算法训练 逗志芃的危机 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和 ...

  8. 蓝桥杯算法训练合集十三 1.P06022.P07033.逗志芃的危机4.唯一的小可爱5.JOE的矩阵

    目录 1.P0602 2.P0703 3.逗志芃的危机 4.唯一的傻子 5.JOE的矩阵 1.P0602 问题描述 编写一个程序,输入一个4位的自然数,将组成该数的各位数字重新排列,形成一个最大数和一 ...

  9. 【蓝桥杯 算法训练】强力党逗志芃

    题目 题目链接 蓝桥杯 算法训练 强力党逗志芃 思路: 树形dp 定义状态: dp[i][j]表示以i为根,消耗j个技能点,最多能换取的v 状态转移方程: dp[pos][k]=max(dp[son] ...

  10. 蓝桥杯 算法训练 幸运的店家

    蓝桥杯 算法训练 幸运的店家 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 炫炫开了一家商店,卖的货只有一个,XXX,XXX卖N元钱.有趣的是,世界上只有面值为3的幂的纸 ...

最新文章

  1. 快速下载 | TBtools 软件最新版本与相关数据库文件
  2. Analyzer tool(MAT)分析JVM内存泄露案例
  3. Ext.Net学习笔记18:Ext.Net 可编辑的GridPanel
  4. Go Timer使用方法
  5. 谈一谈Java编程开发中的并发控制
  6. RTTI-运行时类型识别
  7. 转债---Pregel: A System for Large-Scale Graph Processing(译)
  8. 再说invoke和begininvoke
  9. linux 报错:telnet Connection closed by foreign host
  10. FPGA实现VGA显示(六)——————多字符显示及基于fpga的“打字机”实现
  11. c语言gs迭代法解方程,ex1_7-GS迭代法例题源程序及注释.pdf
  12. SSH终端仿真器:ZOC 8 for Mac
  13. linux中安装apk软件,Linux下安装软件的几种方式
  14. node.js读取JSON文件
  15. MAC打开eclipse一直卡在core.ui的解决办法
  16. linux清除密码记录
  17. inux命令大全完整版
  18. 英语语法-----一般现在时
  19. 计算机显示磁盘但是打不开怎么办,移动硬盘显示盘符但打不开解决教程
  20. 微分方程3_求解偏微分方程

热门文章

  1. Github上的热门iOS开源项目:AFNetworking、MagicalRecord、BlocksKit以及XVim
  2. python跨函数调用变量_对python中不同模块(函数、类、变量)的调用详解
  3. fegin需要实现类_【第24条】静态成员类优于非静态成员类
  4. 软件培训技术选哪个?
  5. Hive的使用之脚本文件
  6. flash一个按钮控制动画_flutter闪屏过渡动画,闪光占位动画
  7. python3.7是什么_Python 3.7 有什么新变化
  8. php 情书,php趣味编程 - php输出笛卡尔情书的秘密
  9. html上传文件_.NET基于WebUploader大文件分片上传、断网续传、秒传
  10. Java GregorianCalendar add()方法与示例