摘要: 这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的。题意:有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服务器相连。对于每台服务器,你可以选择停止该台以及与这台服务器相连的服务器的一项服务。如果一台服务器的所有... 阅读全文
posted @ 2014-08-13 17:48 AOQNRMGYXLMV 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 最开始的时候思路就想错了,就不说错误的思路了。因为这n个数的总和是一定的,所以在取数的时候不是让自己尽可能拿的最多,而是让对方尽量取得最少。记忆化搜索(时间复杂度O(n3)):d(i, j)表示原序列中第i个元素到第j个元素构成的子序列,先手取数能够得到的最大值。sum(i, j) 表示从第i个元素... 阅读全文
posted @ 2014-08-13 11:56 AOQNRMGYXLMV 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 这是我做的第一道状态压缩的题目,而且我自己居然看懂了,理解得还算透彻。题意:给出若干个大写字母组成的字符串,然后选取尽量多的字符串使得这些字母出现偶数次。最朴素的想法,穷举法:每个字符串只有选和不选两种情况,那么穷举的时间复杂度是O(2n)优化:将这n个字符串分成两半,先后枚举前n1个字符串所有可能... 阅读全文
posted @ 2014-08-12 23:28 AOQNRMGYXLMV 阅读(202) 评论(0) 推荐(0) 编辑
摘要: DP还有很长很长一段路要走。。题意:给出n纪念品的价格和钱数m,问最多能买多少件纪念品和买这些数量的纪念品的方案数。首先,求能买最多的纪念品的数量,用贪心法可以解决。将价钱排序,然后从最便宜的开始买,这样就很容易求得最多买的纪念品的数量。方案数就要用到动态规划。dp[j][k]表示花费不超过j元买k... 阅读全文
posted @ 2014-08-12 08:29 AOQNRMGYXLMV 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 第二道广搜的问题虽然思路很清晰,可真要自己把代码敲出来并不是一件容易的事用一维数组模拟一个队列,head和tail分别记录队首和队尾先将迷宫的起点入队,然后向四个方向拓展,如果没有出界或者没有遇到墙壁,那么入队,然后队首出队知道搜到迷宫的出口为止 1 //#define LOCAL 2 #inclu... 阅读全文
posted @ 2014-08-11 09:57 AOQNRMGYXLMV 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 这是做的第一道BFS,很基础很简单的题目广度优先搜索算法如下:(用QUEUE)(1) 把初始节点S0放入Open表中;(2) 如果Open表为空,则问题无解,失败退出;(3) 把Open表的第一个节点取出放入Closed表,并记该节点为n;(4) 考察节点n是否为目标节点。若是,则得到问题的解,成功... 阅读全文
posted @ 2014-08-09 01:04 AOQNRMGYXLMV 阅读(320) 评论(2) 推荐(0) 编辑
摘要: 题目的本意是求LCS,但由于每个序列的元素各不相同,所以将A序列重新编号{1,2,,,p+1},将B序列重新编号,分别为B中的元素在A中对应出现的位置(没有的话就是0)。在样例中就是A = {1 7 5 4 8 3 9},B = {1 4 3 5 6 2 8 9}重新编号以后:A = {1 2 3 ... 阅读全文
posted @ 2014-08-08 08:49 AOQNRMGYXLMV 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 三维的形式下的最大子段问题既然二维可以压缩成一维的情况,那么同样的,三维也可以压缩成一维转化成最大子段问题枚举y和z的边界,压缩后在x轴上求最大子段,用ans记录最大值时间复杂度是O(n^5),由于数据不算太大,所以不会超时一直WA,一直WA,Orz后来终于发现是输出格式的问题,每个输出之间都要加一... 阅读全文
posted @ 2014-08-07 11:34 AOQNRMGYXLMV 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 这题让我看解题报告都感觉弱无力的样子,囧rz题意:几根原本长度相同的木棒,然后被某人当出气筒剪啊剪啊,剪成好几段,然后,好吧,这时间一长记性就差了,忘了原来这堆木棒的长度。输出可能的最短长度如果说思路大概懂,但是代码看不懂,最好的办法就是在纸上模拟,或者把别人代码在计算机上一步一步跟踪调试。首先原长... 阅读全文
posted @ 2014-08-06 16:53 AOQNRMGYXLMV 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 算法就是明白了感觉很简单,不理解就感觉那些代码是天书。第一次接触N皇后问题是在我们的C++教材上,感觉挺困难的。我们教材上给了八皇后的代码,尼玛,就是一个八重循环。好了,回到正题vis数组就是保存了三个方向是否会发生冲突,如果有冲突则不再搜索。因为我们是逐行搜索,所以不会出现一行上有两个皇后的问题。... 阅读全文
posted @ 2014-08-06 11:36 AOQNRMGYXLMV 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 可重复路径搜索,不需要回溯这应该也属于很简单很经典的DFS题目和前面的小狗闯迷宫的题目(HDU 1010Tempter of the Bone)对比,只能走一条路的题目,是需要回溯的。原因很简单,寻路失败就需要把迷宫恢复成搜索前的状态吐槽一下我的失误,一看到矩阵我就以为第一个数代表行数,第二个数代表... 阅读全文
posted @ 2014-08-05 06:53 AOQNRMGYXLMV 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 很简单很经典的DFS题目题意:'@'代表一块油田,在以它为中心的九宫格里的'@',也算同在一块油田,问所给矩阵中有多少块油田思路:遍历地图中的每一个格子,如果遇到'@',则DFS,将这块变为'*',然后八个方向继续DFS这样整个搜索完毕以后,这个map就全部变为'*'了第一次居然忘了做数组越界检测,... 阅读全文
posted @ 2014-08-05 05:52 AOQNRMGYXLMV 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 第一次剪枝,只不过不是我自己剪的,学习别人的代码。我感觉ACM一开始就是学习学习在学习,等弄懂一定量的题目以后,才会慢慢有自己的思路,自己的风格。题意:有一个迷宫,给出一个起点和终点,问能否正好在第t步走到终点,每个方格只能走一遍。两次剪枝都在代码注释里面。这是搜索的第一篇,加油↖(^ω^)↗ 1 ... 阅读全文
posted @ 2014-08-04 22:36 AOQNRMGYXLMV 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 这半个多月一来,主要是在刷DP。开始是一些简单的DP(可是我没有感觉有多简单=_=!!),然后是最大连续子序列,最大公共子序列,最大子矩阵等等,这些题目还好,有的题目甚至可以模板化。还有一些没有解决的难题:1024 Max Sum Plus Plus 最大m段不重叠子段和](可不连续)1244 Ma... 阅读全文
posted @ 2014-08-03 22:29 AOQNRMGYXLMV 阅读(246) 评论(0) 推荐(1) 编辑
摘要: 给出n个点的坐标(坐标均为正数),求最多有多少点能同在一个矩形的边界上。题解里是构造了这样的几个数组,图中表示的很明白了。首先枚举两条水平线,然后left[i]表示竖线i左边位于水平线上的点,on[i]表示位于竖线i上两条水平线之间(并不在水平线上)的点数,on2[i]表示位于竖线i上两条水平线之间... 阅读全文
posted @ 2014-08-03 16:57 AOQNRMGYXLMV 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 有一个正整数序列,求最短的子序列使得其和大于等于S,并输出最短的长度。用数组b[i]存放序列的前i项和,所以b[i]是递增的。遍历终点j,然后在区间[0, j)里二分查找满足b[j]-b[i]≥S的最大的i,时间复杂度为O(nlongn)。这里二分查找用到库函数lower_bound() 1 //#... 阅读全文
posted @ 2014-08-02 22:25 AOQNRMGYXLMV 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 给出一些点的初始位置(x, y)及速度(a, b)和一个矩形框,求能同时出现在矩形框内部的点数的最大值。把每个点进出矩形的时刻分别看做一个事件,则每个点可能对应两个事件,进入事件和离开事件。按这些事件的发生时间进行排序,然后逐个扫描,遇到进入事件cnt++,遇到离开事件--cnt,用ans记录cnt... 阅读全文
posted @ 2014-08-02 21:16 AOQNRMGYXLMV 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 大白书里面的题感觉就是没有什么固定的思路,只能认真理解学习汝佳大大的代码。这里用的Floyd判圈法,就像插图里面的一样,两个小孩,一个快一个慢,如果实在一个环形跑道,那么快的那个最终一定会“追上”慢的那个。明显这里还是有重复计算的部分,但相对其他算法来说还是比较高效的吧,我猜。。6s的题居然只用了0... 阅读全文
posted @ 2014-08-02 17:28 AOQNRMGYXLMV 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 本题可以边读边计算,MaxAi用来维护已经读入的数据的最大值,然后每次读入一个num,就计算一次MaxAi-num,如果比ans更大,就更新ans。 1 //#define LOCAL 2 #include 3 #include 4 #include 5 using namespace std... 阅读全文
posted @ 2014-08-02 08:56 AOQNRMGYXLMV 阅读(140) 评论(0) 推荐(0) 编辑
摘要: n为偶数的时候比较简单,就是相邻两个守卫的礼物和的最大值。首先这是个下限,其次这个值也满足题目要求,所以这就是答案了。当n为奇数的时候上限是守卫索要礼物的最大值的三倍。这也很容易理解,比如n=5,ri都为1的时候,每个人拿到的礼物是1,2,1,2,3有了上限有了下限就可以二分找出答案来了。test函... 阅读全文
posted @ 2014-08-02 08:25 AOQNRMGYXLMV 阅读(444) 评论(0) 推荐(0) 编辑