树形DP——POJ1947 and POJ2486

车载毫米波雷达实战:用MATLAB复现DDMA-MIMO雷达的Empty-band算法(附代码解析) 本文详细介绍了车载毫米波雷达中DDMA-MIMO技术的实战应用,重点解析了Empty-band算法的原理与MATLAB实现。通过搭建仿真环境,文章深入探讨了发射天线通道解调与相位法速度解模糊两大核心难题的解决方案,并提供了完整的代码解析,为雷达算法工程师提供了从理论到实践的清晰指南。 阅读详情
本文针对POJ上的2057、1947、2486、3140四道题目,谈一下个人对树形DP的理解,上面4题无法覆盖树形DP的所有形式,但也有一定的针对性,值得去做一做,思考一下:
树形DP中常常用到“背包思想”,1947和2486就是利用了“背包思想”,状态想好了,最后就是在填“背包”,某个节点的“背包”是用他们的子树的状态进行填充的。
  • POJ1947:状态dp[i][p]表示以节点i为根的树,持有p个节点需要摧毁的最少的公路,状态转移方程大体可以写为dp[i][p]=Min{dp[i][p],{dp[i][p-k]+dp[j][k]|j is a child of i}}
  • POJ2486:状态dp[i][k][0]表示有k步可以走的情况下,女主角回到i节点吃到的最大苹果数;dp[i][k][1]表示有k步可以周的情况下,女主角不一定回到i(可能在i的子树中停止)吃到的最大苹果数。状态转移方程大体可以写为三个(1)dp[i][k][0]=Max{dp[i][k][0],{dp[i][k-l-2][0]+dp[j][l][0]|j is a child of i}};(2)dp[i][k][1]=Max{dp[i][k][1],{dp[i][k-l-2][0]+dp[j][l][1]|j is a child of i}};(3)dp[i][k][1]=Max{dp[i][k][1],{dp[i][k-l-2][1]+dp[j][l][0]|j is a child of i}};
至于POJ2057,首先要将子树进行排序,然后计算子树的一个状态——知道Home不在此子树中所要走的最少的步数
至于POJ3140,就是一个水题

POJ1947 codes
#include<iostream>
#include<string.h>
using namespace std;

#define SIZE 152

int dp[SIZE][SIZE];
int children[SIZE][SIZE];
int parent[SIZE];
int col[SIZE];
int P;

void dfs(int now){
	if(children[now][0]==0){
		dp[now][1]=0;
		return ;
	}
	dp[now][1]=0;
	for(int i=1;i<=children[now][0];i++){
		dfs(children[now][i]);
		for(int j=P;j>=1;j--){
			if(dp[now][j]!=-1){
			   for(int k =1;k<=P;k++)
				   if(dp[children[now][i]][k]!=-1 && j+k<=P &&
					   (dp[now][j+k]==-1 || dp[children[now][i]][k]+dp[now][j] < dp[now][j+k])){
				       dp[now][j+k] = dp[children[now][i]][k]+dp[now][j];
				   }
				dp[now][j]+=1;
			}
		}
	}
}

int main()
{
	int N;
	scanf("%d%d",&N,&P);

	memset(dp,-1,sizeof(dp));
	memset(children,0,sizeof(children));
	memset(parent,-1,sizeof(parent));
	memset(col,-1,sizeof(col));

	for(int i=1;i<N;i++){
		int p,c;
		scanf("%d%d",&p,&c);
		parent[c]=p;
		children[p][++children[p][0]] = c;
	}

	int root = 0;

	for(int i=1;i<=N;i++)
		if(parent[i]==-1){
			root = i;
			break;
		}

	dfs(root);

	int res = -1;
	for(int i=1;i<=N;i++)
		if(dp[i][P]!=-1){
		   int tmp = 0;
		   if(parent[i]==-1) tmp = dp[i][P];
		   else tmp = dp[i][P]+1;
		   if(res==-1 || tmp < res)
			   res = tmp;
		}

	printf("%d\n",res);

	system("pause");
}

POJ2486 codes
/*
	dp[i][j][0]:在i节点还可以走j步,又走回i节点得到的最大苹果数
	dp[i][j][1]:在i节点还可以走j步,不一定走回i节点得到的最大苹果数
	
	dp[i][j][0]的转移方程很简单,dp[i][j][1]的转移方程有两个,注意体会第二
*/
#include<iostream>
#include<string.h>
using namespace std;

#define SIZE 105

int children[SIZE][SIZE];
int val[SIZE];
int dp[SIZE][205][2];

int N,K;

#define _max(x,y) ((x)>(y)?(x):(y))

void dfs(int now,int parent){

	for(int i=0;i<=K;i++)
		dp[now][i][0]=dp[now][i][1]=val[now];

	if(children[now][0]!=0){
		for(int i=1;i<=children[now][0];i++){
			int child = children[now][i];
			if(child == parent) continue;
			dfs(child,now);

			for(int k=K;k>=0;k--)
				for(int j=0;j<=k;j++){
					//dp[now][k+2][0]
					dp[now][k+2][0] = _max(dp[now][k+2][0],dp[now][k-j][0]+dp[child][j][0]);
					//dp[now][k+1][1]
					dp[now][k+1][1] = _max(dp[now][k+1][1],dp[now][k-j][0]+dp[child][j][1]);
					//dp[now][k+2][1]
					dp[now][k+2][1] = _max(dp[now][k+2][1],dp[now][k-j][1]+dp[child][j][0]);
				}
		}
	}

}

int main()
{
	while(scanf("%d%d",&N,&K)!=EOF){
		for(int i=1;i<=N;i++)
			scanf("%d",&val[i]);
		memset(children,0,sizeof(children));
		for(int i=1;i<N;i++){
		    int from,to;
			scanf("%d%d",&from,&to);
			children[from][++children[from][0]] = to;
			children[to][++children[to][0]] = from;
		}

		memset(dp,0,sizeof(dp));

		dfs(1,-1);

		printf("%d\n",dp[1][K][1]);
	}
}




Python爬虫实战:高效爬取中国专利数据库的完整指南 在当今信息爆炸的时代,专利数据作为技术创新的重要指标,对企业研发、市场分析和学术研究都具有极高价值。中国作为全球专利申请量最大的国家,其专利数据库包含了海量的技术创新信息。本文将详细介绍如何使用Python最新技术构建一个高效、稳定的中国专利数据库爬虫系统。中国专利数据库主要由国家知识产权局(CNIPA)维护,包含发明专利、实用新型专利和外观设计专利三大类。截至2023年,中国专利数据库已收录超过400万件发明专利和300万件实用新型专利。 阅读详情

相关推荐

【S32K】S32K144入门笔记(3) SPI(lpspi组件)

0. 引言 与第二篇can对应,第三篇本来想写lin的,毕竟都是车身上常用的总线。但是lin比较麻烦,所以先拖后一下,先把SPI记录一下。 SPI在我们的系统架构中是S32K和ADAS之间做数据传输用的,毕竟速率够高,数据量能传的比较大。 1. 准备 1.1 SPI基础知识 1.2 开发环境 1.2.1 软件开发环境 1.2.2 硬件环境 SPI 2. Demo ...

YoYo的桃子树 2万+

【DP_树形DP专辑】【9月9最新更新】

树,一种十分优美的数据结构,因为它本身就具有的递归性,所以它和子树见能相互传递很多信息,还因为它作为被限制的图在上面可进行的操作更多,所以各种用于不同地方的树都出现了,二叉树、三叉树、静态搜索树、AVL树,线段树、SPLAY树,后缀树等等..      枚举那么多种数据结构只是想说树方面的内容相当多,本专辑只针对在树上的动态规划,即树形DP.做树形DP一般步骤是先将树转换为有根树,然后在树上

1万+

RANSAC地面点分割:从原理到C++实战优化

本文深入解析RANSAC算法在点云地面分割中的原理与C++实战优化,涵盖动态迭代次数、自适应阈值等关键技巧,通过并行计算和内存访问优化提升性能,适用于激光雷达点云处理。

weixin_29015051的博客 277

树形DP总结(转)

树,一种十分优美的数据结构,因为它本身就具有的递归性,所以它和子树见能相互传递很多信息,还因为它作为被限制的图在上面可进行的操作更多,所以各种用于不同地方的树都出现了,二叉树、三叉树、静态搜索树、AVL树,线段树、SPLAY树,后缀树等等..      枚举那么多种数据结构只是想说树方面的内容相当多,本专辑只针对在树上的动态规划,即树形DP.做树形DP一般步骤是先将树转换为有根树,然后在树上进行

Hhaile的专栏 3212

5分钟搞懂基因组规模代谢网络(GSMM):从数据库选择到模型构建全流程

本文详细解析基因组规模代谢网络(GSMM)构建的全流程,从数据库选择到模型优化。重点介绍MetaCyc、BiGG等主流数据库的黄金三角评估法则,对比自上而下与自下而上两种建模方法,并提供模型修剪、仿真优化的实用技巧与避坑指南,帮助研究者高效构建精准代谢网络模型。

weixin_30872157的博客 134

大疆无人机地理视频制作全流程:从SRT文件到GIS叠加(附实战避坑指南)

本文详细解析了大疆无人机地理视频制作全流程,从解析SRT文件中的位姿数据,到在GIS软件中构建地理视频工程并生成可分发的文件。文章重点介绍了地理视频的核心概念、数据处理实战技巧,并探讨了其在应急响应、工程巡检等场景的高级应用与精度边界,为GIS工程师和无人机爱好者提供了一份实用的避坑指南。

river的博客 463

树形dp题目汇总

一、常规树形DP     1、 Hdu 1520 Anniversary party  每个节点有权值,子节点和父节点不能同时选,问最后能选的最大价值是多少?解题报告Here      2、Hdu 2196 Computer  经典题,求树每个点到其他点的最远距离,转化为有根树,深搜两次,一次记录到叶子的最远距离,一次更新最终答案。解题报告Here      3、Poj 1741 Tree(难) ...

albertluf的博客 794

利用ArcGIS快速生成等高线边界,完成地形图拼图

地形图边界一般在CAD中手动绘制,然而,一幅边缘复杂的地形图边界的绘制需要花费大量时间和精力,为了减少重复性工作,提高效率,用ArcGIS软件可以自动生成实测地形图的边界

yl14774636230的博客 9068

树形dp题型——来自大佬

1:给出一棵树 每个节点有权值 要求父节点和子节点不能同时取 求能够取得的最大值 (hdu1520)2:给出一棵树,求离每个节点最远的点的距离 (hdu2196)3:1>在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中允许攻克M个城堡并获得里面的宝物。但由于 地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡。求获得尽...

aang4486的博客 111

手把手教你学Simulink——整流器场景:基于PWM控制的单相全桥整流器设计

摘要:本文详细介绍了使用Simulink搭建基于PWM控制的单相全桥整流器的完整设计流程。主要内容包括:系统结构设计(含交流电源、全桥整流器、滤波电路等模块)、分步骤建模过程(从创建项目到添加各功能模块)、双闭环控制系统设计(电压外环和电流内环PI控制)、参数设置建议及仿真分析。通过仿真验证,该整流器可实现单位功率因数运行和稳定输出电压,并提供了数字锁相环等优化方向。文章为电力电子系统设计提供了实用的Simulink建模指导。(149字)

MHD0815的博客 324

FastAPI基础项目:仿头条新闻的web项目,实现基本的新闻列表页和详情页查看功能

该项目是一个基于FastAPI和MySQL的新闻应用入门项目。主要包含新闻列表页和详情页两个功能页面。项目结构清晰,包含主应用文件、数据库脚本和HTML模板。使用SQLAlchemy进行数据库操作,通过脚本可自动生成50条示例新闻数据。环境配置简单,仅需安装FastAPI、MySQL驱动等基础依赖,通过.env文件管理数据库连接。该项目适合作为FastAPI+MySQL的入门学习案例,展示了基本的CRUD操作、分页查询和模板渲染功能。

数据知道的博客 4424

树形DP题目(一)

树,一种十分优美的数据结构,因为它本身就具有的递归性,所以它和子树见能相互传递很多信息,还因为它作为被限制的图在上面可进行的操作更多,所以各种用于不同地方的树都出现了,二叉树、三叉树、静态搜索树、AVL树,线段树、SPLAY树,后缀树等等.. 枚举那么多种数据结构只是想说树方面的内容相当多,本专辑只针对在树上的动态规划,即树形DP.做树形DP一般步骤是先将树转换为有根树,然后在树上进...

一个写程序的 674

【图论】系列(一)之图论的构成

图论是研究图的数学分支,本章介绍了图论的基本构成和概念

qq_30066733的博客 748

【DP_树形DP专题】题单总结

转载自http://blog.youkuaiyun.com/woshi250hua/article/details/7644959#t2 题单:http://vjudge.net/contest/123963#overview 树,一种十分优美的数据结构,因为它本身就具有的递归性,所以它和子树见能相互传递很多信息,还因为它作为被限制的图在上面可进行的操作更多,所以各种用于不同地方的...

dingzapeng6992的博客 228

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

DP专题·四(树形dp)

1、poj 115 TELE   题意:一个树型网络上有n个结点,1~n-m为信号传送器,n-m+1~n为观众,当信号传送给观众后,观众会付费观看,每铺设一条道路需要一定费用。现在求以1为根,使得收到观众的费用-铺设道路的费用>=0的情况下,能最多给多少个观众观看?   思路:树形dp,dp[i][j]表示以i为根的子树中选择j个观众(叶子)最大的收益。   ①如果当前结点为叶子结点,...

weixin_34237596的博客 118

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

树形dp学习

树的重心 树的直径 树的最大独立集 E. Tree Painting(树形dp换根) 1:给出一棵树 每个节点有权值 要求父节点和子节点不能同时取 求能够取得的最大值 (hdu1520) 2:给出一棵树,求离每个节点最远的点的距离(hdu2196) 3:1>在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中允许攻克M个城堡并获得里面的宝物。但由于 ...

wangtao的博客 236

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

树形DP题目(二)

Hdu 2196http://acm.hdu.edu.cn/showproblem.php?pid=2196 【题意】:给出一棵树,叫你求离这个节点最远的点的距离,输入中给出每两个点间的距离 【解法】:很明显的树dp,也相对比较简单,只要求两次dfs即可,第一次dfs的时候就 把该无向图变成有向图,并且求出该节点到最远儿子的距离保存在h[i]中 第二次求dfs的时候就求出他的父亲节点不要当...

一个写程序的 1312

树形dp总结

最近看了很多树形dp,对于这种类型的题目大概有了一些心得。。 主要是做一些经典模型以后,如果不是特别难的题目,基本上都是在一些经典模型上小修小改,脑洞大一点就可以切了。 题目推荐: POJ1947 POJ2486 BZOJ2500 51NOD 1376 GDKOI2006电子眼 JZOJ 4890 JZOJ 4887 JZOJ 4814 HDU 1054 b

老臣 299

长吐一口气~树形DP汇总(POJ 2486 3659 2342 1947 1463 hdu 2412 )

终于在考试前刷完了树形dp专题。 树形dp其实相比于其他更简单,因为树本身就是无后向性的数据结构。关键在于每个节点状态的设计。 POJ 2486 Apple Tree 这道题如果可以不走回头路那么非常简单,因此 #include #include #include using namespace std; #define N 105 #define K 205 #define ma

gg_gogoing的专栏 751

树形dp

树,一种十分优美的数据结构,因为它本身就具有的递归性,所以它和子树见能相互传递很多信息,还因为它作为被限制的图在上面可进行的操作更多,所以各种用于不同地方的树都出现了,二叉树、三叉树、静态搜索树、AVL树,线段树、SPLAY树,后缀树等等..      枚举那么多种数据结构只是想说树方面的内容相当多,本专辑只针对在树上的动态规划,即树形DP.做树形DP一般步骤是先将树转换为有根树,然后在树上

记录成长的点点滴滴. . . . . 1269

【DP_树形DP专辑】【9月9最新更新】【from zeroclock's blog】

树,一种十分优美的数据结构,因为它本身就具有的递归性,所以它和子树见能相互传递很多信息,还因为它作为被限制的图在上面可进行的操作更多,所以各种用于不同地方的树都出现了,二叉树、三叉树、静态搜索树、AVL树,线段树、SPLAY树,后缀树等等..      枚举那么多种数据结构只是想说树方面的内容相当多,本专辑只针对在树上的动态规划,即树形DP.做树形DP一般步骤是先将树转换为有根树,然后在树上进行

671coder的专栏 1万+

【DP_树形DP专辑】

树,一种十分优美的数据结构,因为它本身就具有的递归性,所以它和子树见能相互传递很多系想你,还因为它作为被限制的图在上面可进行的操作更多,所以各种用于不同地方的树都出现了,二叉树、三叉树、静态搜索树、AVL树,伸展树、线段树、SPLAY树,后缀树等等..      枚举那么多种数据结构只是想说的树方面的内容相当多,本专辑只针对在树上的动态规划,即树形DP.做树形DP一般步骤是先将树转换为有根树,然

1652

POJ-2486 Apple Tree 树形DP

这题和POJ1947类似, 同样是树形DP, 就是因为按照上题的思路写, 导致写的是非常的蛋疼. 调了几小时还是无果. 时候证明还是对状态的意义理解的不透彻. 设dp[x][0][j]表示以节点x为根至多走j步并且返回x处所能够得到的最多苹果. dp[x][1][j]表示以节点x为根至多走j步不需要返回x处所能够得到的最多苹果. 那么就可以得到动态转移方程(此时的dp[x][..][j]还...

weixin_34260991的博客 65
上一篇: POJ2057
下一篇: 编程之美4.4 扩展问题——判断点位于多边形内部
whosemario
博客等级 码龄16年 22粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值