随笔分类 - 动态规划-树形DP
摘要:"http://uoj.ac/problem/205" 好神的题啊。 dp[i][j]表示以i为根的子树调整成长度j需要的最小代价。 首先要观察到dp值是一个下凸壳。 因为从儿子合并到父亲时要把所有儿子的凸壳相加,得到的还是一个凸壳。 父亲要把它连向它父亲的边的影响加入时,设这条边长度为len,则相
阅读全文
摘要:"http://uoj.ac/problem/105" 好神的dp啊。 确定一个点为根之后,蓝线只能是竖着的,不能横跨兄弟。 枚举每个点为根进行树形dp是$O(n^2)$的,$f(x,0/1)$表示以$x$为根的子树中$x$是否作为蓝线终点的最大值。 更科学的做法:$O(1)$把根从一个father
阅读全文
摘要:"http://www.lydsy.com/JudgeOnline/problem.php?id=1065" "https://vijos.org/p/1826" 好难的题啊TWT ∈我这辈子也想不出来系列~ 题解详见2009年的论文徐源盛《对一类动态规划问题的研究》。 这道题我第一眼一脸懵逼。。。
阅读全文
摘要:"http://codevs.cn/submission/2367697/" loli蜜汁(面向高一)树形dp是这道题的改编。 改编后的题目中每个展览厅的有多个不同的画,偷画的时间和画的价值也不同,求最大价值。 需要在叶节点上做01背包。 但codevs上的这道题就简单多了,直接改了改01背包交上去
阅读全文
摘要:"http://vjudge.net/problem/17662" loli蜜汁(面向高一)树形dp水题
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=3242 http://uoj.ac/problem/126 http://codevs.cn/problem/3047/ 因为存在一条边,答案所在的点走向左右的城的最短路都不会经过这条边。 所以枚举这条
阅读全文
摘要:https://vijos.org/p/1892此题需要手动开栈:int size=256#include#includeusing namespace std;#define for1(i,a,n) for(int i=(a);i=(n);--i)#define for4(i,a,n) for(i...
阅读全文
摘要:一看到这道题觉得很水,打了递归树形DP后RE了一组,后来发现必须非递归(BFS)递归版本84分:#include#include#includeusing namespace std;int N,point[1000003],next[2000003],v[2000003],c[2000003]...
阅读全文
摘要:4天终于做出来了,没错我就是这么蒟蒻。教训还是很多的。 建议大家以后编树形DP不要用记忆化搜索,回溯转移状态个人感觉更有条理性。 大神题解传送门by iwtwiioi 我的题解大家可以看注释"//"部分 本题我用的树形DP中dp[x][fa][need]表示编号为x的节点的父亲选(1)没...
阅读全文
摘要:树形DP要有自己的风格,转二叉树是基础,考虑边界最头疼。
阅读全文
摘要:左儿子又兄弟的转发一定要掌握啊,竞赛必用,主要是降低编程复杂度,省时间。个人觉得状压DP也是为了降低编程复杂度。方程就不说了,程序应该能看得懂,用的记忆化搜索,方便理解。 1 #include 2 #include 3 #include 4 using namespace std; 5 bool p...
阅读全文
摘要:1 #include 2 #include 3 #include 4 using namespace std; 5 int N,M,tl[303],tr[303],f[303][303],num[303],con[303]; 6 void insect(int fa,int now) 7 { 8 ...
阅读全文