随笔分类 - dp
摘要:典型的背包+容斥 首先,考虑如果没有个数的限制,那么就是一个完全背包,所以先跑一个完全背包,求出没有个数限制的方案数即可 接下来,如果有个数的限制,那么我们就要利用一些容斥的思想:没有1个超过限制的方案=至少0个超过限制-至少1个超过限制+至少2个超过限制-至少3个超过限制+至少4个超过限制 所以我
阅读全文
摘要:非常好的一道题,可以说是树形dp的一道基础题 首先不难发现,:如果我们把有关系的两个点用有向边相连,那么就会形成一个接近树的结构。如果这是一棵完美的树,我们就可以直接在树上打背包了 但是这并不是一棵完美的树,甚至并不是一棵树,因为: 首先,由于题中有n个点,还有n条边,所以有很大的几率出现环! 而且
阅读全文
摘要:比较简单的背包dp,设计状态f[i][j]表示到了前i个物品,第一台机器加工时间为j,第二台机器加工所用的最小时间,然后背包转移即可 本题卡空间,需要滚动数组优化 本题卡时间,稍微卡下常就行
阅读全文
摘要:发现自己已经把期望dp忘光了... 其实本质上非常简单,就是利用状压的思想跑期望 首先很容易设计出状态:记状态f[s][i]表示到了第i个点,之前已选过的点的状态为s时所能获得的最大期望得分 但是会发现这样做没法转移(你可以试一下,我做了半个点做得原地爆炸) 但是我们知道,期望dp常见的策略是从后向
阅读全文
摘要:蜜汁树形dp... 首先分析一下:他要求一条边至多只能经过两次,那么很容易会发现:从x到y这一条路径上的所有边都只会被经过一次。(如果过去再回来那么还要过去,这样就三次了,显然不合法) 那么其他能产生贡献的部分就只有一下几个部分:x,y的子树内部,LCA(x,y)的上半部分的树以及x-y路径上的点向
阅读全文
摘要:非常好的dp,非常考dp的能力 很显然是个计数问题,那么很显然要么是排列组合,要么是递推,这道题很显然递推的面更大一些。 那么我们来设计一下状态: 设状态f[i][j][k][p]表示目前到了第i个点,这i个点中有j个白点是奇数条好的路径的结尾,k个黑点是奇数条好的路径的结尾,p个白点是偶数条好的路
阅读全文
摘要:好神奇的dp... 首先有一个很简单的思想:设dp[i][j]表示目前到了第i分钟,朝上的面被烤了j分钟的情况下所需的最小交换次数 那么有转移:dp[i][j]=min(dp[i-1][j],dp[i-1][i-j]+1) 这一点很好理解,就是讨论现在向上这面上一分钟的状态:如果上一分钟这一面也朝上
阅读全文
摘要:玄学字符串dp... 题意:给定一个括号序列,求长度为2n的合法的括号序列的个数(要求每个被统计的合法序列中均至少有一个子串为给定的括号序列) 题解: 这题没有想的那么复杂,就是暴力的一个dp 首先我们设状态f[i][j][k][0/1]表示当前放到了第i个括号,前i个括号中左右括号个数差为j,已经
阅读全文
摘要:这是一道...卡了我一个月的树形dp... 我真是太弱了... 其实仔细想想,这题的核心思路并不是特别复杂,但是的确存在不小的难度 作为一个看过全网基本所有题解+标程才弄明白这题到底怎么回事的蒟蒻,我努力把所有东西揉到一起让各位看官一眼看懂... 首先我们简化一下题意:给定一棵满二叉树,每个叶节点有
阅读全文
摘要:非常好的树形dp 首先,有个很显然的状态:记状态f[i][j]表示以i为根节点的子树中选了j个叶节点作战,那么很显然有转移:f[i][j1+j2]=f[i<<1][j1]+f[i<<1|1][j2] 所以我们只需爆搜一发状态,然后每次更新即可 但是有个问题:当我们搜到最底层的叶节点时,由于他的贡献与
阅读全文
摘要:什么鬼noip互测题... 这题很显然是树形dp,但设计状态以及转移是个难点 记状态f[i][j][k]表示以i为根节点的子树,离i最近的祖宗节点编号为j放了虫洞(伐木场?),i的子树内放了k个伐木场的方案数 设to为i的某个子节点,当i不放伐木场时,有: dp[i][j][k]=min(dp[to
阅读全文
摘要:我说这是我们的noip互测题你信吗... 首先介绍一下仙人掌(略,参见题面) 然后我们思考一下怎么做: 首先,如果原图是一棵树,那么做法是很显然的(树上最长链嘛) 但是,图是一个仙人掌,所以树上最长链的做法有bug 所以我们考虑:是否能将树上的做法移接到仙人掌上即可 怎么移接? 我们看到,根据仙人掌
阅读全文
摘要:莫名互测题... 这题一看就是期望dp,可是不会转移,所以考试写50分暴力走人... 正解:期望dp+记忆华搜索 设状态f[i][j]代表聪聪在i点,可可在j点时聪聪追上可可的期望 然后用dfs更新即可,注意先预处理出最短路和tpos[i][j]表示聪聪在i点,可可在j点时聪聪走一步时会走到的位置
阅读全文