MZOJ 1134: 二叉苹果树
按书上大的,dfs还需加强
1 #include <bits/stdc++.h> 2 #define read read() 3 using namespace std; 4 5 int read 6 { 7 int x = 0; char ch = getchar(); 8 while(ch < 48 || ch > 57) ch = getchar(); 9 while(ch >= 48&& ch <= 57) { x = 10 * x + ch - 48; ch = getchar();} 10 return x; 11 } 12 13 const int N = 101; 14 15 int n,q; 16 int head[N],size; 17 bool vis[N]; 18 int l[N],r[N],a[N],tot[N]; 19 int f[N][N]; 20 21 struct edge{ 22 int v,nxt,w; 23 }e[N<<1]; 24 25 void add(int u,int v,int w) 26 { 27 e[++size].v = v; 28 e[size].w = w; 29 e[size].nxt = head[u]; 30 head[u] = size; 31 } 32 33 void readdata() 34 { 35 n = read; q = read; q++; 36 int u,v,w; 37 for(int i = 1; i < n; i++) 38 { 39 u = read; v = read; w = read; 40 add(u,v,w); 41 add(v,u,w); 42 } 43 } 44 45 void maketree(int u) 46 { 47 for(int i = head[u]; i ; i = e[i].nxt) 48 { 49 int v = e[i].v; 50 if(vis[v]) continue; 51 a[v] = e[i].w; 52 vis[v] = 1; 53 l[u] = v; 54 maketree(v); 55 break; 56 } 57 for(int i = head[u]; i ; i = e[i].nxt) 58 { 59 int v = e[i].v; 60 if(vis[v]) continue; 61 a[v] = e[i].w; 62 vis[v] = 1; 63 r[u] = v; 64 maketree(v); 65 break; 66 } 67 68 } 69 70 int dp(int i,int j) 71 { 72 if(!j) return 0; 73 if(!l[i] && !r[i] )return a[i]; 74 if(f[i][j]) return f[i][j]; 75 for(int k = 0; k < j; k++) 76 f[i][j] = max(f[i][j], dp(l[i],k) + dp(r[i],j - 1 - k) + a[i]); 77 return f[i][j]; 78 } 79 80 void work() 81 { 82 vis[1] = 1; 83 maketree(1); 84 /*for(int i = 1; i <= n; i++) 85 { 86 printf("%d %d \n",l[i],r[i]); 87 }*/ 88 //for(int i = 1; i <= n; i++) printf("%d ",a[i]); 89 printf("%d",dp(1,q)); 90 } 91 92 int main() 93 { 94 // freopen("apple tree.in","r",stdin); 95 readdata(); 96 work(); 97 return 0; 98 }
转载于:https://www.cnblogs.com/mzg1805/p/10300252.html
MZOJ 1134: 二叉苹果树相关推荐
- 二叉苹果树(树型DP+背包)
二叉苹果树 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点).这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号 ...
- 洛谷2015 二叉苹果树 树形DP
https://www.luogu.org/problemnew/show/P2015 二叉苹果树 时间限制: 1 Sec 内存限制: 128 MB 题目描述 有一棵苹果树,如果树枝有分叉,一定是分 ...
- 洛谷P2015 二叉苹果树【树形dp】
P2015 二叉苹果树 时间限制 1.00s 内存限制 125.00MB 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点 ...
- AcWing1074. 二叉苹果树(树形DP)题解
题目传送门 题目描述 有一棵二叉苹果树,如果树枝有分叉,一定是分两叉,即没有只有一个儿子的节点. 这棵树共 N 个节点,编号为 1 至 N,树根编号一定为 1. 我们用一根树枝两端连接的节点编号描述一 ...
- 【算法•日更•第九期】树型动态规划详解:二叉苹果树
▎前置技能:动态规划&树 树型动态规划一听就知道是在树结构上使用的动态规划,那么不会树结构和动态规划怎么行?戳这里了解动态规划和树. ▎什么是树型动态规划? ☞『定义』 树形动态规划问题可以分 ...
- 树形DP入门(二叉苹果树+没有上司的舞会)
树形dp学习笔记 - _Lancy - 博客园二叉苹果树 二叉苹果树 没有上司的舞会 二叉苹果树的处理可以说是非常模板了,正常容易联想到倒过来的数字三角形 for(int i=n;i>=1;i- ...
- 洛谷 P2015 二叉苹果树 题解
洛谷 P2015 二叉苹果树 题解 洛谷 P2015 题目 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有NNN个结点(叶子点或者树枝分叉点),编号为1-NNN ...
- 洛谷P2015 二叉苹果树
题目描述 有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点) 这棵树共有 NN 个结点(叶子点或者树枝分叉点),编号为 1 \sim N1∼N,树根编号一定是 11. 我们用一 ...
- P2015 二叉苹果树 树形DP
题目描述 有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点) 这棵树共有 NN 个结点(叶子点或者树枝分叉点),编号为 1 \sim N1∼N,树根编号一定是 11. 我们用一 ...
最新文章
- bellman_ford寻找平均权值最小的回路
- 图文并茂的生产者消费者应用实例demo
- MapReduce的序列化案例
- hdu 2602 Bone Collector(01背包)
- Eclipse安装Perl插件
- unixbench类似_UnixBench的实现介绍-阿里云开发者社区
- linux 切换目录技巧,Lnux入门教程:Linux目录切换技巧
- 设计模式三(工厂方法模式)学习笔记
- 一个内存增长问题的分析和处理(二)——valgrind工具的用法
- idea导入spring源码_Spring源码入门到放弃(一):环境准备
- Docker Compose 引用环境变量
- 北京科技大学计算机控制实验报告,北科大计组原理实验报告.docx
- 微处理器 微型计算机 单片机之间有何区别,微处理器、微计算机、微处理机、CPU、单片机、嵌入式处理器它们之间有什么区别?...
- openwrt定时任务 2021-10-08
- 快递单号物流查询自动识别接口【快递鸟API通用教程】
- 二分钟倒计时c语言编程,c语言分钟倒计时代码.docx
- 新的开始,fighting
- 如何绘制用户体验地图
- 快排 找第k大的数字
- CIDR表示IP地址
热门文章
- 性能优化之图片懒加载
- Maven拉取私服Jar包和发布jar包到maven私服
- 图像局部显著性—点特征(GLOH)
- main线程 子线程 顺序_面试官:线程池如何按照core、max、queue的执行顺序去执行?详解...
- JAVA实现N皇后问题(回溯法)
- 非nodejs方式的vue.js的使用
- Linux关机和重启命令总结
- 在Eclipse中搭建Python Django
- 无法解析的外部符号的几种可能(lib方面的)(还有dll方面的,不在本文中)...
- 使用Vitamio打造自己的Android万能播放器(1)——准备