树形dp(学习过程+刷题总结)

树形 d p (学习过程 + 刷题总结) \Huge{树形dp(学习过程+刷题总结)} 树形dp(学习过程+刷题总结)

文章目录

  • 写在前面
  • 基本的dp方程
    • 选择节点类
    • 树形背包类
  • 例题练习
    • 已练习
    • 未练习

写在前面

花了几天时间学了一下树形dp,然后刷了一些题(基本上全都是在刷题),因为树形dp大致就分为两种类型,并且每道题都有自己的特点,并没有固定的格式,所以学习方式应该是多刷题练习。

学习时的的参考博客:

动态规划入门——动态规划与数据结构的结合,在树上做DP - Koshkaaa (cnblogs.com)
【算法学习笔记】动态规划与数据结构的结合,在树上做DP - Koshkaaa (cnblogs.com)
【动态规划】树形DP完全详解! - Koshkaaa (cnblogs.com)
UVA1292 Strategic game - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
子树合并背包类型的dp的复杂度证明_关于子树合并背包类型的dp的复杂度-CSDN博客
树形 DP - OI Wiki (oi-wiki.org)

  • 前三篇是 K o s h k a a a Koshkaaa Koshkaaa佬的文章,从基础引入到总结,写的非常详细,讲的也很清楚,强烈推荐!!!
  • 第四篇是洛谷的一篇题解,其中对树形dp的几道经典题目进行讲解,值得一看。
  • 第五篇是树形dp关于时间复杂度的计算和证明。
  • 第六篇是 O I W i k i OI\ Wiki OI Wiki上面树形dp的讲解,思路比较详细。

基本的dp方程

树形dp其实大致就分为以下两种:

选择节点类

{ d p [ i ] [ 0 ] = d p [ j ] [ 1 ] d p [ i ] [ 1 ] = max ⁡ / min ⁡ ( d p [ j ] [ 0 ] , d p [ j ] [ 1 ] ) \begin{array}{l} \left\{\begin{array}{l} d p[i][0]=d p[j][1] \\ d p[i][1]=\max / \min (d p[j][0], d p[j][1]) \end{array}\right. \\ \end{array} {dp[i][0]=dp[j][1]dp[i][1]=max/min(dp[j][0],dp[j][1])

树形背包类

{ d p [ v ] [ k ] = d p [ u ] [ k ] + v a l d p [ u ] [ k ] = max ⁡ ( d p [ u ] [ k ] , d p [ v ] [ k − 1 ] ) \left\{\begin{array}{l} d p[v][k]=d p[u][k]+v a l \\ d p[u][k]=\max (d p[u][k], d p[v][k-1]) \end{array}\right. {dp[v][k]=dp[u][k]+valdp[u][k]=max(dp[u][k],dp[v][k1])

例题练习

练习进行中…

已练习

题目:Strategic game - 洛谷

题解:https://blog.csdn.net/weixin_73523694/article/details/139181768

题目:P2016 战略游戏 - 洛谷

题解:https://blog.csdn.net/weixin_73523694/article/details/139181768

题目:P1352 没有上司的舞会 - 洛谷

题解:https://blog.csdn.net/weixin_73523694/article/details/139117795

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2196

题解:https://blog.csdn.net/weixin_73523694/article/details/139125496

题目:P3478 [POI2008] STA-Station - 洛谷

题解:https://blog.csdn.net/weixin_73523694/article/details/139180997

题目:P2986[USACO10MAR] Great Cow Gathering G - 洛谷

题解:https://blog.csdn.net/weixin_73523694/article/details/139196487

题目:[P3574 POI2014] FAR-FarmCraft - 洛谷

题解:https://blog.csdn.net/weixin_73523694/article/details/139202197

P1122 最大子树和 - 洛谷

https://www.luogu.com.cn/problem/P2014

未练习

https://loj.ac/problem/2546
https://loj.ac/problem/2268
http://poj.org/problem?id=3585
http://codeforces.com/problemset/problem/708/C
https://codeforces.com/contest/791/problem/D
https://codeforces.com/problemset/problem/1120/D
https://codeforces.com/problemset/problem/1153/D
https://codeforces.com/problemset/problem/735/E
https://codeforces.com/problemset/problem/1060/E

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode每日一题第八十九天

class Solution { public:int subarraySum(vector<int>& nums, int k) {unordered_map<int,int> mp;mp[0] 1;int count 0,pre 0;for(auto x:nums){pre x;if(mp.find(pre-k) ! mp.end()){count mp[pre-k];}mp[pre];}return count;} };

【LVGL_Linux安装NXP的Gui-Guider】

GUI Guider是恩智浦为LVGL开发了一个上位机GUI设计工具&#xff0c;可以通过拖放控件的方式设计LVGL GUI页面&#xff0c;加速GUI的设计。 虽然他只支持自家芯片&#xff0c;但是应用层我们可以直接拿来用作其他MCU上。 GUI-Guider 下载 NXP官网下载&#xff1a;链接&#xff1…

无界鼠标与键盘,如何轻松控制多台电脑

简介 在软件开发领域&#xff0c;高效地管理多台电脑是至关重要的。Mouse without Borders软件为开发人员提供了一种便捷的解决方案&#xff0c;使他们能够轻松地在多台电脑之间共享鼠标和键盘。不仅如此&#xff0c;Mouse without Borders还提供了许多高级功能&#xff0c;如…

Android 12系统源码_多窗口模式(二)系统实现分屏的功能原理

前言 上一篇我们具体分析了系统处于多窗口模式下&#xff0c;Android应用和多窗口模式相关方法的调用顺序&#xff0c;对于应用如何适配多窗口模式有了一个初步的认识&#xff0c;本篇文章我们将会结合Android12系统源码&#xff0c;具体来梳理一下系统是如何触发多窗口分屏模…

SpringBoot 热插拔AOP,动态的实现AOP【简单易懂,有大用】

B站学习地址 文章目录 一、理论二、核心代码2-1、自定义操作类型枚举2-2、自定义 Advisor2-3、动态添加/删除advisor 工具类2-4、提供测试的 Controller 三、测试3-1、自定义注解3-2、自定义拦截器3-3、测试 四、源码获取 前段时间在学习sentinel和dubbo的时候&#xff0c;很好…

HarmonyOS 鸿蒙应用开发 - 多态样式 stateStyles

前言&#xff1a;Styles和Extend仅仅应用于静态页面的样式复用&#xff0c;stateStyles可以依据组件的内部状态的不同&#xff0c;快速设置不同样式&#xff0c;类似于css伪类&#xff0c;但语法不同。 ArkUI提供以下四种状态&#xff1a; focused&#xff1a;获焦态。normal&…

请解释Java Web应用的开发流程,包括前后端分离和交互方式。请解释Java中的锁分离技术,并讨论其在提高并发性能方面的作用。

请解释Java Web应用的开发流程&#xff0c;包括前后端分离和交互方式。 Java Web应用的开发流程通常包括多个阶段&#xff0c;这些阶段涵盖了从需求分析到部署和维护的全过程。同时&#xff0c;随着技术的发展&#xff0c;前后端分离已经成为了现代Web应用开发的一种主流方式。…

请解释Java Web中的Filter过滤器的作用和常见应用场景。什么是Java Web中的Servlet API?请列举其核心接口和类。

请解释Java Web中的Filter过滤器的作用和常见应用场景。 在Java Web开发中&#xff0c;Filter&#xff08;过滤器&#xff09;是一个非常重要的组件&#xff0c;它位于客户端与服务器端之间&#xff0c;用于拦截客户端发送到服务器的请求&#xff0c;或者在服务器将响应返回给…

就业班 第三阶段(ELK) 2401--5.20 day1 ELK 企业实战 ES+head+kibana+logstash部署(最大集群)

ELKkafkafilebeat企业内部日志分析系统 1、组件介绍 1、Elasticsearch&#xff1a; 是一个基于Lucene的搜索服务器。提供搜集、分析、存储数据三大功能。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff…

Git 仓库中 -- 代码冲突产生、定位、解决的流程

目录 前置知识1 工具环境2 冲突的产生2.1 仓库中的源代码2.2 人员 A 首先更改代码2.3 人员 B 更改代码&#xff0c;产生冲突2.3.1 第一次错误提示&#xff1a;2.3.2 第二次错误提示&#xff1a; 3 查看冲突4 手动解决冲突4.1 方式一4.2 方式二&#xff08;tortoisegit&#xff…

【Linux网络】端口及UDP协议

文章目录 1.再看四层2.端口号2.1引入linux端口号和进程pid的区别端口号是如何生成的传输层有了pid还设置端口号端口号划分 2.2问题2.3netstat 3.UDP协议3.0每学一个协议 都要讨论一下问题3.1UDP协议3.2谈udp/tcp实际上是在讨论什么&#xff1f; 1.再看四层 2.端口号 端口号(Po…

基于Android studio 使用SQLite数据库完成登录注册功能——保姆级教程

&#x1f345;文章末尾有获取完整项目源码方式&#x1f345; 点击快捷传送地址&#xff1a; 保姆级教学——制作登陆注册功能页面 目录 一、准备工作 二、创建相关文件 三、页面布局 四、DabaHelper帮助类的编写 五、RegisterActivity注册页面 六、LoginActivity登录页面…

Dev-c++的资本道路

Dev-c是美国发明的&#xff0c;c原来是编写软件的东西。可是&#xff0c;正所谓一方水土养一方人&#xff0c;美国是一个发达的资本主义国家&#xff1b;所以&#xff0c;一些投靠资本的&#xff0c;高层的美国人&#xff0c;用c赚取了许多利益。底层的人在用&#xff0c;高层的…

代码随想录算法训练营第三十七天|435. 无重叠区间、763.划分字母区间、56. 合并区间、738.单调递增的数字、968.监控二叉树

435. 无重叠区间 文档讲解&#xff1a;代码随想录 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 本道题与上个题目相似&#xff0c;都是求重叠区间 统计重叠区间的个数&#xff0c;减去重叠区间的个数就是无重叠区间了 主要就是为了让区间尽可能的重叠。&a…

机器学习中的时卷积神经网络

时卷积神经网络(Temporal Convolutional Network, TCN)是一种特殊的卷积神经网络架构,它主要用于处理时间序列数据。与传统的卷积神经网络(Convolutional Neural Network, CNN)相比,TCN有以下几个主要特点: 1. 因果性(Causality): - 传统的CNN在特定位置的输出取决于当前及…

微信小程序源码-基于Java后端的会议发布与预约系统毕业设计(附源码+演示录像+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设…

数字识别技术

数字识别技术是一种在人工智能和计算机视觉领域广泛应用的技术&#xff0c;旨在从图像中识别出数字&#xff0c;并将其正确地分类为0到9之间的一个数字。以下是对数字识别技术的详细介绍&#xff1a; 一、数字识别技术的定义与应用 数字识别技术是一种计算机视觉任务&#xf…

Java的结构与运行机制

1. JDK JRE JVM三者的区别 JDK(Java Development Kit)&#xff1a;Java开发工具包 JDK包含JRE&#xff0c;还包括其他例如&#xff1a;编译器(javac)、javadoc、jar等&#xff0c;JDK是能够创建和编译程序的。 JRE(Java runtime environment)&#xff1a;Java运行环境 JRE是运…

手把手一起学习Python NumPy

NumPy 是用于处理数组的 python 库&#xff0c;NumPy 中的数组对象称为 ndarray&#xff0c;它提供了许多支持函数&#xff0c;使得利用 ndarray 非常容易。Numpy官方网址 NumPy 安装 使用pip安装NumPy 模块&#xff1a; pip install numpyNumPy 入门 创建numpy数组&#x…

虚拟化技术[4]之桌面虚拟化

桌面虚拟化 桌面虚拟化技术现状&#xff1a;桌面虚拟化技术问题案例分析&#xff1a;VMware View 桌面虚拟化 每个桌面镜像是一个带有应用程序的操作系统&#xff0c;终端用户通过一个虚拟显示协议来访问桌面系统。目的是使用户的使用体验同使用桌面上的PC一样。 桌面虚拟化是一…