luogu P2015 二叉苹果树
一道qq姐和dtx很早就做了的题www
想学树形dp就是从这道题开始的
然后做了几道题
之后被难住了
于是回来做这道题
首先这道题保证了是一棵二叉树
emmmmm
然后一个dp数组
dp[u][j] 代表保留u节点j条边的最大值
题目保证1为根,那么结果就是dp[1][Q]
状态转移方程:
dp[u][j] = max(dp[u][j],dp[u][j - k - 1] + dp[v][k] + edge[i].weight)
v为u的子节点,k是枚举v保留的边的数
保留j条边的话,其中有一条边是u和v所连的边
所以保留v节点k条边再加上u节点剩下的可以保留的j - 1 - k条边再加上u和v之间的边
状态转移方程真的太难想了www
看看代码吧
#include<cstdio> #include<algorithm> using namespace std; #define maxn 110struct EDGE{int nxt,to,weight; }edge[maxn * 2];//因为忘了开二倍所以emmmint head[maxn],cnt; int dp[maxn][maxn]; int n,q;void add(int x,int y,int w){edge[++cnt].nxt = head[x];edge[cnt].to = y;head[x] = cnt;edge[cnt].weight = w; }int treedp(int u,int fa){int num = 0;for(int i = head[u];i;i = edge[i].nxt){int v = edge[i].to;if(v != fa){//存的双向所以防止死循环num += treedp(v,u) + 1;//return一个值,子树的边数,再加上相连的一条for(int j = min(num,q);j > 0;j--)for(int k = min(num,j);k >= 0;k--)dp[u][j] = max(dp[u][j],dp[u][j - k - 1] + dp[v][k] + edge[i].weight);}}return num; }int main(){scanf("%d%d",&n,&q);for(int i = 1;i < n;i++){int x,y,w;scanf("%d%d%d",&x,&y,&w);add(x,y,w);add(y,x,w);}treedp(1,0);printf("%d",dp[1][q]);return 0; }
【令人头大
/*
然后最后插一句没什么意义的感慨
我们都是
渺小而平庸的
无名之辈
谢谢你们能在这么短暂的生命之中,记住我的名字
(没错就是看完电影哭的不行之后的伤春悲秋www
*/
转载于:https://www.cnblogs.com/sevenyuanluo/p/10260677.html
luogu P2015 二叉苹果树相关推荐
- 洛谷P2015 二叉苹果树【树形dp】
P2015 二叉苹果树 时间限制 1.00s 内存限制 125.00MB 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点 ...
- 洛谷 P2015 二叉苹果树 题解
洛谷 P2015 二叉苹果树 题解 洛谷 P2015 题目 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有NNN个结点(叶子点或者树枝分叉点),编号为1-NNN ...
- 洛谷P2015 二叉苹果树
题目描述 有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点) 这棵树共有 NN 个结点(叶子点或者树枝分叉点),编号为 1 \sim N1∼N,树根编号一定是 11. 我们用一 ...
- P2015 二叉苹果树 树形DP
题目描述 有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点) 这棵树共有 NN 个结点(叶子点或者树枝分叉点),编号为 1 \sim N1∼N,树根编号一定是 11. 我们用一 ...
- P2015 二叉苹果树
传送门 这道题要用到链式前向星... 非常标准的树形背包DP 只要理解了,题就不难 只要理解了...... 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树 ...
- 洛谷 P2015 二叉苹果树
题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来 ...
- 洛谷2015 二叉苹果树 树形DP
https://www.luogu.org/problemnew/show/P2015 二叉苹果树 时间限制: 1 Sec 内存限制: 128 MB 题目描述 有一棵苹果树,如果树枝有分叉,一定是分 ...
- 二叉苹果树(树型DP+背包)
二叉苹果树 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点).这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号 ...
- AcWing1074. 二叉苹果树(树形DP)题解
题目传送门 题目描述 有一棵二叉苹果树,如果树枝有分叉,一定是分两叉,即没有只有一个儿子的节点. 这棵树共 N 个节点,编号为 1 至 N,树根编号一定为 1. 我们用一根树枝两端连接的节点编号描述一 ...
最新文章
- OpenCV Aruco模块常见问题解答
- JS 对select动态添加options操作[IEFireFox兼容]
- Linux C 算法分析初步
- 办公自动化-演练-从A表中提取数据整合到B表中-0223
- 秋凉了,大家别加班了,早回吧:)
- mORMot Js对象解析 Json 实例
- centos,apache运维经验
- 攻防世界 Web_php_include write up
- 技术复习-java类加载机制
- 不懂技术的小白,使用电商网站建设工具有什么注意事项?
- TTL与RS-232电平转换芯片MAX232/MAX3232
- MATLAB 插值与拟合
- 使用信号量机制解决家庭吃水果问题。
- figma 导入导出 fig 文件
- 基于TI 335X的工业网关参考设计
- Masm for MAC安装教程+实例分析
- category ue 协议_LTE中UE能力(UE Capability)的梳理和解析
- Python集合和字符串及练习
- web概念介绍、软件架构、静态资源
- 注册表键值的导出与导入
热门文章
- 最新android 电脑系统,你的Windows电脑即将可以运行最新版安卓系统
- java灌水bfs二叉树,二叉树的BFS搜索
- 电脑外设(I/O)简介:显示器
- java.sql.SQLException: sql injection violation, multi-statement not allow
- 一本通5.4练习1:涂抹果酱
- 转发 :QQ游戏百万人同时在线服务器架构实现
- Laya微信排行榜基于TypeScript脚本 详细步骤
- JSP中连接SQL 2000数据库的问题总结
- PMPtiku项目管理第六版PMI人才三角
- 机器学习-生成对抗网络实战(二-2)