当前位置: 首页 > news >正文

树形DP详解

今天呢我将给大家讲一个叫做树形DP的东西啊,这是个什么呢,好难猜呀

声明:该文章有可能会重制

本质

树形DP的本质就是树上面的DP,那么树上面该怎么DP呢,大家回顾一下DP的本质,通过前面的状态推到后面的状态,那么树形DP就是根据叶子推断根节点的值的一种DP(问题一般都不是什么单纯的合并点的问题,而是一些复杂的,看着像DP但是数据结构是树的题目),总而言之,树形DP如名字所显示,在树上面进行DP

题目

光讲大家可能听不懂,来一道题大家就明白了。

那么这道题求的是最大最小,看着就是DP,又是树,那么答案就出来啦,他是树形DP!!!

那该如何解决呢?首先设dp[节点数][2],dp[i][0]表示第i个点不参加会有什么情况(下面的点可以参加也可以不参加,取最大值),dp[i][1]表示参加又是什么情况(下面的点只好不参加,取他们0的情况),然后取根节点的0和1的最大值就可以了。

#include<bits/stdc++.h>
#include<vector>
using namespace std;
int n,a[6010],root,dp[6010][2]; 
vector<int> tree[6010];
bool b[6010];
void dfs(int m){dp[m][1]=a[m];for(int v:tree[m]){dfs(v);dp[m][0]+=max(dp[v][0],dp[v][1]);dp[m][1]+=dp[v][0];}
}
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n-1;i++){int l,k;cin>>l>>k;tree[k].push_back(l);b[l]=1;}for(int i=1;i<=n;i++){if(!b[i]){root=i;break;}}dfs(root);cout<<max(dp[root][0],dp[root][1]);
}

解释完成!

http://www.lryc.cn/news/621292.html

相关文章:

  • 基于springboot的信息化在线教学平台的设计与实现(源码+论文)
  • 2025天府杯数学建模C题
  • Python网络爬虫(二) - 解析静态网页
  • MFC的使用——使用ChartCtrl绘制曲线
  • 数据结构初阶(13)排序算法-选择排序(选择排序、堆排序)(动图演示)
  • 手机实时提取SIM卡打电话的信令声音-整体解决方案规划
  • 百度智能云x中科大脑:「城市智能体」如何让城市更会思考
  • pyecharts可视化图表-pie:从入门到精通
  • QT中ARGB32转ARGB4444优化4K图像性能的实现方案(完整源码)
  • 基于SpringBoot的救援物资管理系统 受灾应急物资管理系统 物资管理小程序
  • 日志系统(log4cpp)
  • Torch -- 卷积学习day2 -- 卷积扩展、数据集、模型
  • AM32电调学习-使用Keil编译uboot
  • JVM的逃逸分析深入学习
  • 一、linux内存管理学习(1):物理内存探测
  • 18 ABP Framework 模块管理
  • Encoder-Decoder Model编码器-解码器模型
  • MCP入门:Python开发者的模型上下文协议实战指南
  • 蓝桥杯STL stack
  • 图论(5)最小生成树算法
  • 我的 LeetCode 日记:Day 37 - 解锁动态规划:完全背包问题
  • opencv基础学习与实战(2)
  • 基于 LDA 模型的安徽地震舆情数据分析
  • Docker build创建镜像命令入门教程
  • 地测管理部绩效考核关键指标与地质数据分析
  • 码上爬第九题【协程+webpack】
  • C++基础(①入门教程)
  • K8s学习----Namespace:资源隔离与环境管理的核心机制
  • **标题:发散创新,探索编程中的平衡设计****摘要**:本文将探讨如何在编程中运用平衡设计思想,通过实例分析与
  • 37 C++ STL模板库6-string_view