<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[专攻挖掘机炒鸡蛋算法的专栏]]></title><description><![CDATA[欢迎挑刺，抬杠，吐槽，开嘲讽。以进步为唯一目的]]></description><link>https://blog.youkuaiyun.com/ACM_HKBU</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ACM_HKBU]]></copyright><item><title><![CDATA[【转】用GDB调试程序（一）]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/46326033</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/46326033</guid><author>ACM_HKBU</author><pubDate>Tue, 02 Jun 2015 11:17:34 +0800</pubDate><description><![CDATA[原文章：http://blog.youkuaiyun.com/haoel/article/details/2879




用GDB调试程序
作者：haoel@csdn


GDB概述
————

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许，各位比较喜欢那种图形界面方式的，像VC、BCB等IDE的调试，但如果你是在UNIX平台下做软件，你会发现GDB这个调试工]]></description><category></category></item><item><title><![CDATA[Leetcode #15 3 Sum]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/45308751</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/45308751</guid><author>ACM_HKBU</author><pubDate>Mon, 27 Apr 2015 12:50:35 +0800</pubDate><description><![CDATA[原题：


Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note:
Elements in a triplet (a,b,c]]></description><category></category></item><item><title><![CDATA[POJ #1018 Communication System]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/45169381</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/45169381</guid><author>ACM_HKBU</author><pubDate>Tue, 21 Apr 2015 13:34:34 +0800</pubDate><description><![CDATA[简单dp题，0-1背包模型。定义d[i][j]表示考虑完前i个设备，最大bandwidth为j时的最小费用。bandwidth的范围题目中没说，但貌似不大（500以内）


#define UVa  "poj-1018.cpp"		//Communication System
char fileIn[30] = UVa, fileOut[30] = UVa;

#include
#inclu]]></description><category></category></item><item><title><![CDATA[POJ #1050 1088 1141 1732 (dp初步练习)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/45153507</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/45153507</guid><author>ACM_HKBU</author><pubDate>Mon, 20 Apr 2015 17:53:51 +0800</pubDate><description><![CDATA[POJ 1050 To the Max:
最大子矩阵和问题，枚举行数，将两行之间的元素纵向压缩为一维数组，然后求最大子区间和。
动态规划部分时间复杂度O(n^3)，空间复杂度优化后O(n)，用于保存压缩后的一维数组。
#define UVa  "poj-1050.cpp"		//To the Max
char fileIn[30] = UVa, fileOut[30] = UVa;

#in]]></description><category></category></item><item><title><![CDATA[UVa #821 Page Hopping , UVa #820 Internet Bandwidth (习题11-1，11-3)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/45078853</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/45078853</guid><author>ACM_HKBU</author><pubDate>Thu, 16 Apr 2015 18:09:28 +0800</pubDate><description><![CDATA[一个Floyd最短路，一个EdmondsKarp最大流


Run Time: 0.128s
#define UVa  "11-1.821.cpp"		//Page Hopping
char fileIn[30] = UVa, fileOut[30] = UVa;

#include
#include
#include
#include
#include

using namespace ]]></description><category></category></item><item><title><![CDATA[UVa #12661 Funny Car Racing (例题11-11)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44752615</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44752615</guid><author>ACM_HKBU</author><pubDate>Mon, 30 Mar 2015 16:18:23 +0800</pubDate><description><![CDATA[带权最短路。但松弛操作需要分类讨论，要考虑清楚。Bellman-Ford和Dijkstra速度差不多。


Run Time: 0.139s
#define UVa  "LT11-11.12661.cpp"		//Funny Car Racing
char fileIn[30] = UVa, fileOut[30] = UVa;

#include
#include
#include
#i]]></description><category></category></item><item><title><![CDATA[UVa #1349 Optimal Bus Route Design (例题11-10)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44734935</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44734935</guid><author>ACM_HKBU</author><pubDate>Sun, 29 Mar 2015 23:21:50 +0800</pubDate><description><![CDATA[这道题作为一道regional，最值得学习的应该是问题的等价转换。


把“找出几个圈，使得所有的点都只存在于一个圈内”，转换为“给每个点找一个孩子，使得一个点只有一个父亲”。转换后的问题，就可以用二分图匹配来做了：每个点拆成两部分分别放在二分图的S和T，使得S到T的连线代表儿子-父亲的关系。之后再求二分图的带权值的完美匹配，则可以保证每个结点只有一个儿子、一个父亲的情况下，求出最小费用了。]]></description><category></category></item><item><title><![CDATA[UVa #1658 Admiral (例题11-9)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44701739</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44701739</guid><author>ACM_HKBU</author><pubDate>Sat, 28 Mar 2015 15:15:40 +0800</pubDate><description><![CDATA[每个点只能访问一次，可以将每个点拆成两个点，中间连一条费用为0、容量为1的边。这样求最小费用最大流时就保证了每个点只访问一次。


因为是两艘船走，所以限制流量为2，求出最小费用即可。注意点数会翻倍，数组也要多开一倍大。


Run Time: 0.046s
#define UVa  "LT11-9.1658.cpp"          //Admiral

#include
#in]]></description><category></category></item><item><title><![CDATA[UVa #11082 Matrix Decompressing (例题11-8)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44678143</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44678143</guid><author>ACM_HKBU</author><pubDate>Fri, 27 Mar 2015 16:04:12 +0800</pubDate><description><![CDATA[Run Time: 0.029s
#define UVa  "LT11-8.11082.cpp"		//Matrix Decompressing
char fileIn[30] = UVa, fileOut[30] = UVa;

#include
#include
#include
#include
#include
#include
#include
using namespace std;]]></description><category></category></item><item><title><![CDATA[UVa #753 A Plug for UNIX (例题11-7)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44673753</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44673753</guid><author>ACM_HKBU</author><pubDate>Fri, 27 Mar 2015 11:38:06 +0800</pubDate><description><![CDATA[网络最大流问题。


建图的时候，取一个起点s，与所有设备的接口连接；再取一个终点t，与所有插线板的接口连接，流量都设为1。注意这里可能在相同的点之间多次添加边（比如不同的设备有着相同的接口），不过不影响解，只不过可能会增加增广的次数，对效率有所影响。
之后在转换器可以转换的接口之间连线，流量无限大。


这样，求s到t之间的最大流，再用设备数量减去最大流的数量就是答案了。

]]></description><category></category></item><item><title><![CDATA[UVa #658 It's not a Bug, it's a Feature! (例题11-6)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44649081</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44649081</guid><author>ACM_HKBU</author><pubDate>Thu, 26 Mar 2015 13:57:25 +0800</pubDate><description><![CDATA[和第七章的题目很像，dijkstra求隐式图最短路。


Run Time: 2.202s
#define UVa  "LT11-6.658.cpp"		//It's not a Bug, it's a Feature!
char fileIn[30] = UVa, fileOut[30] = UVa;

#include
#include
#include
#include
#inclu]]></description><category></category></item><item><title><![CDATA[UVa #10048 Audiophobia (例题11-5)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44648961</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44648961</guid><author>ACM_HKBU</author><pubDate>Thu, 26 Mar 2015 13:48:54 +0800</pubDate><description><![CDATA[因为会输入多组查询，因此用Floyd算法进行预处理效率会比每次重新算的效率要高一些。


因为题目要求的是一条最大权值最小的路，因此Floyd算法中的松弛操作的右边应该从加法变为max()。


Run Time: 0.022s
#define UVa  "LT11-5.10048.cpp"		//Audiophobia
char fileIn[30] = UVa, fileOut[]]></description><category></category></item><item><title><![CDATA[UVa #247 Calling Circles (例题11-4)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44648819</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44648819</guid><author>ACM_HKBU</author><pubDate>Thu, 26 Mar 2015 13:38:16 +0800</pubDate><description><![CDATA[图的连通性问题。两个人相互连通当且仅当两人互相直接或者间接打过电话。因为间接通话的存在，无法直接用dfs来求连通块。要用Floyd算法实现的传递闭包来预处理两人是否直接或间接的通过话。


Floyd算法完后则可以用dfs求出所有连通块了。


Run Time: 0.059s
#define UVa  "LT11-4.247.cpp"		//Calling Circles
char]]></description><category></category></item><item><title><![CDATA[UVa #1151 Buy or Build (例题11-3)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44647977</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44647977</guid><author>ACM_HKBU</author><pubDate>Thu, 26 Mar 2015 11:51:46 +0800</pubDate><description><![CDATA[套餐只有8个，可以暴力枚举。不过边太多，不能枚举套餐都求一遍最小生成树。


其实只需要在一开始求出不包含套餐的最小生成树，把这些边记下来备用。之后枚举套餐的时候，先把套餐中的点全部加入并查集，然后在原最小生成树的基础上，再来求最小生成树就可以了。


那些一开始就没有被加入最小生成树的边，到了暴力枚举又加入很多权值为0的边排在他们前面，就更加不会被包含到最小生成树中了。


]]></description><category></category></item><item><title><![CDATA[UVa #1395 Slim Span (例题11-2)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44647839</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44647839</guid><author>ACM_HKBU</author><pubDate>Thu, 26 Mar 2015 11:41:25 +0800</pubDate><description><![CDATA[这道题的目标是最大权值和最小权值的差最小，和最小生成树不太一样。


我们可以暴力枚举最小权值（放弃权值更小的边），然后求最小生成树。因为Kruscal算法按照权值顺序考虑各条边，所以一旦所有点连通，则可以计算出最大权值和最小权值的差并记录，然后continue。


Run Time: 0.079s
#define UVa  "LT11-2.1395.cpp"		//Slim Sp]]></description><category></category></item><item><title><![CDATA[UVa #12096 The SetStack Computer (例题5-5)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44647339</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44647339</guid><author>ACM_HKBU</author><pubDate>Thu, 26 Mar 2015 11:13:15 +0800</pubDate><description><![CDATA[这道题的思想在后面用到了几次，因此还是贴出来：


这道题是一个编码问题，即将某种数据结构通过一定的方法转化为独特的整数。这样就可以用整数来进行操作，大大简化了程序。


对于这道题中的集合来说，一个集合包含了0或多个集合，并且可能有多层嵌套，无法用STL的set来模拟。但是我们可以给每一种集合分配一个ID。比如我们给{}分配1，{{}}就可以表示成{1}，我们给他分配2。{{},{}]]></description><category></category></item><item><title><![CDATA[UVa #12219 Common Subexpression Elimination (例题11-1)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44647223</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44647223</guid><author>ACM_HKBU</author><pubDate>Thu, 26 Mar 2015 11:06:17 +0800</pubDate><description><![CDATA[这题和普通的表达式树很像，但如果按照一般的做法（用L、R代表范围），会TLE，因为重复了太多无用的扫描


这题树中的结点对应的子树都是二叉树，不存在只有一个儿子的情况。输入的字符串中也只有两种情况，结点名字后面紧跟一个左括号的，和不跟括号的。
因此很容易判断一个结点是否为叶子结点：只要在原字符串中看他后面有没有紧跟着左括号就行了。如果有，立刻递归建树作为左子树。因为有左子树就一定有右子树]]></description><category></category></item><item><title><![CDATA[UVa #1380 A Scheduling Problem (例题9-26)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44493229</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44493229</guid><author>ACM_HKBU</author><pubDate>Fri, 20 Mar 2015 15:58:00 +0800</pubDate><description><![CDATA[居然一次就过了。。做了两天，泪流满面啊。不过代码跑得很慢。。有机会优化一下


这道题想清楚了还是很简单的，但是一开始的思路不容易理顺。下面文中我的f和g与Rujia书中的定义相反，请注意区分。


题目里说，把所有的无向边去掉之后，最终答案则一定是由剩下的有向边组成的最长路径长度k或者k+1。


所以我们的工作就变成了：给无向边分配方向，使得最后得到的树里，最长路径长度是否可]]></description><category></category></item><item><title><![CDATA[UVa #12170 Easy Climb (例题9-25)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44416365</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44416365</guid><author>ACM_HKBU</author><pubDate>Wed, 18 Mar 2015 17:19:58 +0800</pubDate><description><![CDATA[每次的调整都要依赖于上一次的决策，因此是一个多阶段决策问题。


设 dp(i,j) 表示将第i个山坡高度改为j，还需要修改前i-1个山坡，所需要的代价总合。


然而 j 的可能性太多（d


深入分析问题，发现如果前后两个山坡的高度已经固定了，那么当前山坡调整后的高度应该属于[ max(h[i-1], h[i+1])-d , min(h[i-1], h[i+1])+d ]。如]]></description><category></category></item><item><title><![CDATA[UVa #10723 Cyborg Genes (习题9-6)]]></title><link>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44313129</link><guid>https://blog.youkuaiyun.com/ACM_HKBU/article/details/44313129</guid><author>ACM_HKBU</author><pubDate>Mon, 16 Mar 2015 21:02:07 +0800</pubDate><description><![CDATA[最长公共子序列模型。


不同的解出现于d[i-1][j] == d[i][j-1]


Run TIme: 0.009s
#define UVa  "9-6.10723.cpp"        //Cyborg Genes

#include
#include
#include
#include
#include

using namespace std;

int main() ]]></description><category></category></item></channel></rss>