紫书训练
mxYlulu
ACM燃烧我的卡路里
展开
-
《紫书:动态规划初步》总结二
多阶图的最短路 对于一个数字矩阵,从左往右走,每次可以直右,右上,右下。走到最后的数字和最小为多少。 同时输出字典序最小的走过的行号。 这里有n^2的状态,但可以容易发现,每一列的n个状态可以划分为一个阶段,实质上是阶段之间的转移。 枚举每个阶段,对于每个阶段的每个状态分别转移即可。 dp[i]][j]表示从i、j开始走到最后的最小和,这是满足最优子结构的。 维护每个状态下一次最优路径...原创 2019-05-13 23:32:12 · 135 阅读 · 0 评论 -
紫书:二分图匹配 最大流解决
网络流的一个经典应用是二分图匹配。 匹配是指:两两没有公共点的边集。 二分图是指:可以把结点集分成两部分X和Y,使得每条边恰好一个端点在XXX,另一个端点在YYY。换句话说,同色节点不相邻,进行二染色。 一般在画图的时候,把XXX结点和YYY结点画成左右两列。 可以证明一个图是二分图,当且仅当没有奇数圈。 当我们使用dinicdinicdinic跑二分图的时候,复杂度只有O(n12m)O(n^\f...原创 2019-06-01 22:54:06 · 563 阅读 · 0 评论 -
Uva1515 Pool construction 最小割
Uva1515Uva1515Uva1515 题意: 对于一个字符矩阵,有#\##和...两种字符,分别代表草和洞。相邻草和洞需要建立栅栏,草和洞可以互相转化通过一定的花费。求最小花费。 题解: 我们考虑分割,想到"割"这个概念。 类似于之前最大闭合子权图的概念,割的应用一般出现:可选可不选的费用上,选择了割就是不选择这个费用。 对于这道题,同理,我们需要满足的是:草源点无法通达到洞汇点。(也就是建...原创 2019-06-07 00:07:55 · 166 阅读 · 0 评论 -
隐式图搜索
隐式图搜索 对于某些状压题,转移很少,但是状态很多。 我们是无法直接判断能否转移的,因为实质上很多转移是没有必要的。 所以我们在用到这个状态的时候,枚举转移即可。这是第一次遇到。 如果以后更深的理解和好题自然会加上来。 Uva658Uva 658Uva658 题意:有nnn个bugbugbug,有mmm个补丁。 每个补丁能够改变当前bugbugbug的总状态,不过也有前提条件(需要的状态)。 我们...原创 2019-06-06 15:02:54 · 525 阅读 · 0 评论 -
状态结点查重的问题
lrjlrjlrj老师给我们三种解决办法,对于一个节点的查重。 这里拿八数码问题中的状态查重来介绍: 数组表示了当前状态。 编码和解码 将排列变成整数:设计一套排列的编码和解码,把0−80-80−8的全排列和0−3628790-3628790−362879的整数一一对应。 然而具体实现的对应并没有看懂。 int vis[362880],fact[9]; void init_lookup_tabl...原创 2019-06-12 15:17:15 · 255 阅读 · 0 评论 -
双向bfs
事实上HDU−2612HDU - 2612HDU−2612也是双向bfsbfsbfs,但由于题目要求的原因,所以没有将其优势发挥出来。 双向bfsbfsbfs实质上是引入起点和终点,一起遍历,并且给数组多加一维,结束的标准时到达的这个点的另一维也已经到达了。 并且双向bfsbfsbfs是双向的最短路,所以此时一定是最短路。考虑广度优先遍历,越到后面的层数,常数越大,如果采用双向bfsbfsbfs可...原创 2019-06-12 14:39:32 · 455 阅读 · 0 评论 -
存在免费套餐的最小生成树 Uva1151
题意: 求最小生成树。(n2n^2n2条边:需要自己算一共有nnn个点的坐标) 不过你可以选择一个套餐,花费ccc使得套餐内点全部连通。 套餐数量q≤8,n≤1000q≤8,n≤1000q≤8,n≤1000 题解: 套餐数量较少,我们可以枚举(二进制即可)。 枚举之后把所有包含的边权赋值为000 求最小生成树并且能够使得(边权赋值为000的),primprimprim不太好实现。 思路一: 枚举∗...原创 2019-06-05 17:24:14 · 122 阅读 · 0 评论 -
表达式树的简析
二叉树是表达式处理的常用工具。找到"最后计算"的运算符(它是整棵表达式树的根),然后递归处理。 递归处理成树是表达式处理的一个重要方式。这里我只记录和理解了lrjlrjlrj老师的代码(抄了一遍,自己还没动手自己写过。不过目前这不是重点内容,所以到此为止。 个位数加减乘除成表达式树 const int maxn = 1000; int lch[maxn],rch[maxn];char op[max...原创 2019-06-05 13:15:30 · 470 阅读 · 0 评论 -
《紫书:动态规划初步》总结一
数字三角形问题: 每个单独的点基本都是有两个父亲,有两个孩子。 我们在贪心计算的时候,走错了孩子会导致局部最优而不是全局最优。 因为我们舍弃了一些情况,暴力枚举不会舍弃任何情况,但是会导致重复枚举。因为左父亲要走这个孩子,右父亲也是。 考虑动态规划: 每个点走到最后一层的最大值是不受上层结构的影响的。(无后效性) 如果从根节点开始走,走到i点是最好的选择,那么一定包含剩下的i点的最优路...原创 2019-05-13 13:31:51 · 239 阅读 · 0 评论