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