一道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 二叉苹果树相关推荐

  1. 洛谷P2015 二叉苹果树【树形dp】

    P2015 二叉苹果树 时间限制 1.00s 内存限制 125.00MB 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点 ...

  2. 洛谷 P2015 二叉苹果树 题解

    洛谷 P2015 二叉苹果树 题解 洛谷 P2015 题目 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有NNN个结点(叶子点或者树枝分叉点),编号为1-NNN ...

  3. 洛谷P2015 二叉苹果树

    题目描述 有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点) 这棵树共有 NN 个结点(叶子点或者树枝分叉点),编号为 1 \sim N1∼N,树根编号一定是 11. 我们用一 ...

  4. P2015 二叉苹果树 树形DP

    题目描述 有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点) 这棵树共有 NN 个结点(叶子点或者树枝分叉点),编号为 1 \sim N1∼N,树根编号一定是 11. 我们用一 ...

  5. P2015 二叉苹果树

    传送门 这道题要用到链式前向星... 非常标准的树形背包DP 只要理解了,题就不难 只要理解了...... 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树 ...

  6. 洛谷 P2015 二叉苹果树

    题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来 ...

  7. 洛谷2015 二叉苹果树 树形DP

    https://www.luogu.org/problemnew/show/P2015 二叉苹果树 时间限制: 1 Sec  内存限制: 128 MB 题目描述 有一棵苹果树,如果树枝有分叉,一定是分 ...

  8. 二叉苹果树(树型DP+背包)

    二叉苹果树 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点).这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号 ...

  9. AcWing1074. 二叉苹果树(树形DP)题解

    题目传送门 题目描述 有一棵二叉苹果树,如果树枝有分叉,一定是分两叉,即没有只有一个儿子的节点. 这棵树共 N 个节点,编号为 1 至 N,树根编号一定为 1. 我们用一根树枝两端连接的节点编号描述一 ...

最新文章

  1. OpenCV Aruco模块常见问题解答
  2. JS 对select动态添加options操作[IEFireFox兼容]
  3. Linux C 算法分析初步
  4. 办公自动化-演练-从A表中提取数据整合到B表中-0223
  5. 秋凉了,大家别加班了,早回吧:)
  6. mORMot Js对象解析 Json 实例
  7. centos,apache运维经验
  8. 攻防世界 Web_php_include write up
  9. 技术复习-java类加载机制
  10. 不懂技术的小白,使用电商网站建设工具有什么注意事项?
  11. TTL与RS-232电平转换芯片MAX232/MAX3232
  12. MATLAB 插值与拟合
  13. 使用信号量机制解决家庭吃水果问题。
  14. figma 导入导出 fig 文件
  15. 基于TI 335X的工业网关参考设计
  16. Masm for MAC安装教程+实例分析
  17. category ue 协议_LTE中UE能力(UE Capability)的梳理和解析
  18. Python集合和字符串及练习
  19. web概念介绍、软件架构、静态资源
  20. 注册表键值的导出与导入

热门文章

  1. 最新android 电脑系统,你的Windows电脑即将可以运行最新版安卓系统
  2. java灌水bfs二叉树,二叉树的BFS搜索
  3. 电脑外设(I/O)简介:显示器
  4. java.sql.SQLException: sql injection violation, multi-statement not allow
  5. 一本通5.4练习1:涂抹果酱
  6. 转发 :QQ游戏百万人同时在线服务器架构实现
  7. Laya微信排行榜基于TypeScript脚本 详细步骤
  8. JSP中连接SQL 2000数据库的问题总结
  9. PMPtiku项目管理第六版PMI人才三角
  10. 机器学习-生成对抗网络实战(二-2)