ACM笔记
文章平均质量分 76
nvfumayx
这个作者很懒,什么都没留下…
展开
-
单调队列
单调队列 : 队列中保存的是潜在的解,队首保存最优解。支持操作 : 与普通队列支持的操作相同,push_back() , pop()。 pop()操作仅仅返回队首元素, 因此时间复杂度O(1)。 push_back()操作,均摊下来每次操作的时间复杂度O(1):1.消除所有不可能的解 2.更新队首指针使其指向最优解http:/原创 2011-06-17 21:46:00 · 622 阅读 · 0 评论 -
Poj 1383 Labyrinth( 搜索获得全局最短路径 )
http://poj.org/problem?id=1383题目大意: 在图中找出距离最远的两点间的距离。 题目给出的图类似如下:( '#'代表障碍物, '.'代表可以通行的路 ) ####### #.#.### #.#.### #.#.#.# #.....#原创 2012-05-06 21:49:39 · 1817 阅读 · 0 评论 -
poj 2593 Max Sequence( 最大子段和 )
题目描述:Give you N integers a1, a2 ... aN (|ai| You should output S. 思路:将数组a[]从下标k处划分成两部分a[1-k]和a[k+1,N],用m1表示a[1-k]的最大字段和,m2表示a[k+1,N]的最大字段和,则 S = Max { m1, m2 } ( 其中k属于区间[2-N-1] ,k不能取1和N,原创 2011-11-09 22:29:08 · 1974 阅读 · 2 评论 -
poj 2446 Chessboard (最大二分匹配)
题意 : 给出一个矩形棋盘,其中包含一些不可到达的方格,问能否用长度为2的骨牌填满。开始往搜索剪枝上想,复杂度太大( O(2^N),其中N为棋盘面积 )。这题的骨牌长度特殊,抛去搜索,有特殊的方法可用,将棋盘上的所有格子划分成两个结点集合,再将两个集合的邻接的结点连边,构成二分图,问题就转化为了求该图的最大二分匹配。为什么可以转化成二分图来做,我是这样想的,一个骨牌覆盖了棋盘上的两格,原创 2011-10-22 22:52:05 · 779 阅读 · 0 评论 -
poj 2376 Cleaning Shifts( 贪心 )
题意:给出区间[ 1,T ]和N个小区间,要求用尽可能少的小区间覆盖区间[ 1,T ],输出最少的小区间数量;若不能覆盖,输出-1。思路:贪心。具体:令begin为当前未被覆盖的区间起点。 贪心策略:选取包含点begin的区间中右端点最大的那个;原创 2011-10-15 22:46:06 · 2015 阅读 · 0 评论 -
poj 1230 Pass-Muraille( 贪心 )
题意 : 有一块棋盘式的场地和一个魔术师,场地中有n道墙,魔术师一次最多能穿越k道墙。求移除最少数量的墙,使得魔术师可以在场地的任意一列表演都可以成功。虽然自己感觉出这题应该用贪心来做,并且找到了一个自己看来很正确的贪心思路,也简单的证明了我的贪心策略的正确性,但还是WA了原创 2011-08-12 23:08:23 · 1614 阅读 · 0 评论 -
poj 1228 Grandpa's Estate(凸包)
题意 : 给出凸多边形某些边上的部分点,问根据给出点能否唯一确定一个凸多边形。思路:1. 求出凸包的所有顶点( 即边的交点 )。2. 枚举每一条边,对于一条边检测是否有3个点在其上。#include #include using namespace std;/原创 2011-08-10 22:01:08 · 1243 阅读 · 0 评论 -
poj 1190 生日蛋糕( 深搜+2类重要剪枝总结 )
题意 : 有一个多层蛋糕,已知蛋糕的体积和层数,求该蛋糕的最小表面积(最底层的下表面面积不计入总面积) 题目对每一层的半径和高度都有限制,下层的半径和厚度要大于上层的半径和厚度 Ri > Ri-1, Hi > Hi-1,且半径和厚度均为整数原创 2011-08-02 22:14:41 · 4089 阅读 · 1 评论 -
poj3740 Easy Finding(深搜)
Easy FindingTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 11432 Accepted: 2802DescriptionGiven a M×N matrix A. Aij ∈ {原创 2011-07-05 21:58:07 · 980 阅读 · 0 评论 -
poj 3630 Phone List( 简单字典树 )
题意 : 有一个电话记录表,问其中的记录是否有冲突。例如 :111 111234上面的两个电话号码就会发生冲突,当我拨打111234时, 拨到111电话就打出去了。 这题比较水。不过注意不要用new了,会超时的,改用buffer吧,这题new不起啊。只要不超内存,buffer尽量开大点。#include using namespace std;c原创 2011-06-27 22:14:00 · 604 阅读 · 0 评论 -
poj 3468 A Simple Problem with Integers( 线段树求区间和 )
从这题似乎感悟到了点线段树对区间操作的lazy思想,即只需要找到合适区间对其更新并标记,子区间暂不更新。通过画图模拟更加直观。 #include using namespace std;const int Max = 100000;// 对象struct TreeNode { int l, r; long long c; // 增量 long long原创 2011-06-27 12:26:00 · 666 阅读 · 0 评论 -
poj 3321 Apple Tree( 树状数组 )
题意 : 有一颗N(N对该果树有两种操作:C x : 更新果树,若x叉处有苹果,则摘下;若没有,则长出一个新的。Q x : 统计子树x上的苹果数量(包括x)这题的关键就是怎样将树中的节点映射到树状数组。解决 : 找到树节点的偏序关系。 这是我第一道树状数组,感觉树状数组中的元素一定要满足偏序关系,找到偏序关系是应用树状数组的关键,呵呵,不知道这个感觉是否正确,以原创 2011-06-25 22:49:00 · 665 阅读 · 0 评论 -
poj 3318 Matrix Multiplication(用向量压缩方阵)
题意 : 方阵A,B,C, 问A * B = C是否成立。(方阵为n*n维) 一看题还以为用Strassen算法,就到自习室看了一晚,算法不容易实现。看了Discuss才知道有更好的办法解决这题,利用矩阵的性质。若 A = B, 则 T * A = T * B. 注意反之不成立,即矩阵乘法消去律不成立。但这题仍然可利用消去律,因为消去律不成立这一事件发生的概率非常小。随机生成一个向量T原创 2011-06-23 22:58:00 · 569 阅读 · 0 评论 -
poj3287 Catch That Cow(广度优先搜索)
题意 : Farmer John 被告知他的丢失的牛的位置K( 0 有两种走法,令x表示FJ的当前位置, y表示他的下一个位置。1. y 2. y 思路 : 这题和1915 Knight Moves题很相似, 都是求从一点出发到另一点的最少步数, 搜索就可以了, 细心点还可以剪枝PS : 深搜,广搜就以Graph那一章的图为例,切记每个节点只访问一次!!!!!!!原创 2011-06-23 08:47:00 · 596 阅读 · 0 评论 -
3067 Japan( 树状数组 || 归并排序 )
题意 : 日本的东西海岸各有N, M个城市,它们之间有K条路,求这K条路的交点个数( N,M 先用树状数组做了一下,时间480ms, 内存2M; 又用归并排序,稍慢一点,时间590ms, 内存5M这也正常,用树状数组的时间复杂度O(KlgN), 归并O(KlgK), 其中(N这是用树状数组做的// 3067 Japan.cpp : 定义控制台应用程序的入口点。//#incl原创 2011-06-19 22:40:00 · 561 阅读 · 0 评论 -
poj3277 City Horizon(离散化+线段树)
题意 : Farmer 带着他的牛在城市中散步。日落时,牛望着远方地平线上N( N 其中一个建筑这样表示(A, B, H),A B(1 = 覆盖问题,用线段树解决。但坐标系范围太大,建筑数相对较少,这会使坐标系内较空旷,因此本题要离散化PS:通过本题学到了什么 1.对于线段树,后来的更新可能会覆盖前面的更新 2.计算面积时中间结果可能会溢出(注意)#原创 2011-06-22 08:09:00 · 1917 阅读 · 0 评论 -
poj3253 Fence Repair( 贪心 )
题意 : 将一个木板锯成N块(即锯N-1次)。规则是每次将一个长度为L的木板锯成2块(不一定相等), 代价是L元。求N-1次代价的最小值。 开始以为是动态规划了,这题确实可以很容易找到子问题,而且子问题间会出现不少重叠,锯一个木板的代价 = Min{ 锯它的两个子木板的代价之和 } + 所锯木板长度, 但在哪里锯这个木板就很难决定了,子问题数量太多,叉掉。也想过贪心,但没想到是哈弗曼原创 2011-06-20 22:47:00 · 558 阅读 · 0 评论 -
poj 1671 Rhyme Schemes(第二类Stirling数)
题意: 有n行诗,每行都有其韵律。问题:n行诗存在的韵律组合数。思路:第二类Stirling数是把个元素放入k个等价类的方法数目(每个等价类都不能为空)。(摘自维基百科,稍有修改) 注意到此题的'行数'>='韵律数',可以把'行数'抽象为n个元素,'韵律数'抽象为k个等价类. 所求即为:把n行放入k个‘韵律’中的方法数( 其中:1=状态转移方程:原创 2013-10-06 20:40:47 · 1787 阅读 · 0 评论