自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

YueLing's Blog

coding是一门艺术 代码风格和逻辑的美

  • 博客(264)
  • 收藏
  • 关注

转载 ACM-ICPC 竞赛算法题目类型

acm相关的所需要掌握的算法分类

2016-08-07 01:47:12 1382

原创 0-1背包 多阶段决策

1. 根据输入的每一个物品,来判断影响的每一个状态,2. 状态是分阶段的,阶段就是每一个物品,和每一个状态。

2016-08-07 01:46:52 451

原创 uva1618 分步枚举优化

1. 不需要获得所有情况,存在性问题等,遇到多次枚举例如 n^4这种,可以用多次n^2得到大小关系,优化为常数级获取关系,然后依次n^2枚举+常数获取关系,复杂度仍为n^2。2. 此题:存在性问题,有即可,利用两次遍历分别找到最值(每一点的最优解)并存在数组中,最后一次遍历直接调用数组中的最值,解决存在性问题,因为最值存在则存在。

2016-08-06 11:58:30 892

原创 uva1602 无方向位置的姿势判重

1. 存储一个姿势,不针对它的方向和位置。涉及三个动作:翻转,移动,旋转。2. 利用标准化使位置固定到一个相对位置上。3. 利用三个动作判重。4. 利用集合来无重复的保存解,5. 判断解的范围进行取舍。

2016-08-06 11:58:16 1042

原创 uva1599 bfs双向遍历 利用数组保存中间结果

1. bfs双向遍历。 a. 双向遍历可以保存多条最短路。 b. 无权无向图,还可以提升bfs效率,是单向bfs的2倍。2. 利用额外的数组保存值。3. 反向遍历输出路径。

2016-08-06 11:58:07 2298

原创 uva1572 Self-Assembly 拓扑排序 提炼有向图模型

1. 拓扑排序2. 利用2n,2n+1存储a+,a-这类型增加的状态。3. 有向图模型的提炼。4. 2n+1^1 = 2n的转换

2016-08-06 11:57:41 447

原创 uva1451 平均值 数形结合

1. 数形结合是一种便于分析的手段,可用于表达多个变量间的函数关系.2. 例如利用斜率来表示平均数(构造两个变量和第三个变量的关系)。3. 比较斜率时将除法转换为乘法。4. 通过i和i+1 j-2和j-1 令j-i > 1保证了在不越界的情况下充分剪枝。

2016-08-06 11:57:05 1320

原创 uva1412 基金管理

1. 复杂状态做映射。2. 分阶段对每种情况的每种决策做遍历。3. 刷表要好的初始化。4. double数组不能用memset。5. 递归输出可以利用保存的之前下标并从前到后。

2016-08-06 11:56:50 1357

原创 uva1374 快速幂计算 迭代加深优先逼近

1. 迭代加深优先递归时先逼近可能值,例如先加法后减法。2. 个数少时剪枝效果不好可以打表。3. 一层一层的dfs

2016-08-06 11:56:38 453

原创 uva1354 天平难题 位枚举子集

1. &表示交集,^表示差集,|表示并集。2. 利用交集是否为0还可以判断是否存在包含关系。3. 递归枚举

2016-08-06 11:56:19 1707

原创 uva1347 旅行 不回头旅行商

1. 多路径同起步。2. 找到解决问题的办法后再找合适的状态和决策,然后状态转换。3. 不回头,所以可以依次状态转换,若可以回头,则转变为旅行商问题。

2016-08-06 11:56:04 740 1

原创 uva1343 旋转游戏

1. 迭代加深```if(d+h() > maxd)//若true,则表示d次数太大,已经无法满足最少h()次的要求。 return false;```2. 利用两个数组,一个连续数组存值,另一个数组标识位置。3. 剪枝:状态合并,分类讨论。 分解目标个数,分别求解,使得过程中的状态得以合并。过程中状态复杂度往往不是线性,目标个数分解是线性,所以效率得以大幅度提升。

2016-08-06 11:55:48 450

原创 uva1252 20个问题

1. 遇到集合个数太多的情况想办法转换表达方式,再用数组存储,相当于用状态做一个映射。2. 需要得到第几个的时候就不太好s++这样枚举,适合多次枚举第几个数,再判断是否曾经枚举过。3. 分阶段的思想运用时如果需要利用阶段的状态,则更适合利用二进制枚举状态,以方便状态的表示,递归i>>i+1这种不方便表示。4. 根据题意注意题目中什么时候要用max,什么时候要用min。5. 多次枚举每一位可以得到结果,

2016-08-06 11:55:35 1296

原创 UVA1025 固定终点二维dp

1. 状态,决策,转换。2. 遍历每一个状态并记忆化搜索。3. 复杂度为 状态*决策。4. 递推过程找好大层次,比如这道题的时间,可以利用上一层的结果。5. 固定终点问题常以到终点的值为主状态。

2016-08-06 11:55:30 440

原创 uva572 油田 连通块遍历

代码的简洁性需要注意小技巧:1. 方向数组。2. 外面包一层空气防止判断边界。3. 更改原来的数组的状态而不需要重新建立vis数组(这样会破坏原始数据,是一个不好的习惯,但是这样很灵活。)

2016-08-06 11:55:07 811

原创 uva437 DAG最长路 节点映射间接表达

1. DAG最长路的模板记忆化搜索。2. 当图节点是结构体时,利用结构体数组的下标映射到图中。

2016-08-06 11:54:46 508

原创 uva208 剪枝 连通块儿的判定

1. 图不一定是连通的,某些题型下要提前进行判断,进行剪枝。2. 递归遍历标记同一个连通块儿。3. 从结果遍历判断和结果在同一个连通块儿的子集。4. 子集遍历:核心在于递归前的cursor的++,和递归后cursor的--。

2016-08-06 11:54:36 536

原创 hdu 2224 The shortest path 单向旅行商问题

Problem:有n个节点,一个人去访问这n个节点,要从最左边的节点开始,经过这n个节点后再返回源点,在达到最右边之前只能向右走,同理回来时只能向左走,同一个节点只能经过一次,问最短路是多少?

2016-08-06 11:54:25 689

原创 poj3159 candies dijkstra

1. dijkstra 算法,利用优先队列优化,找到最近的点。2. 添加vis数组剪枝。3. 优先队列重载运算符时,右边的值优先级大放在前,所以 a > b表示从小到大排列。

2016-08-06 11:54:13 461

原创 poj2528 贴海报 区间树离散化

1. 利用离散化大大优化速度。2. 离散化:排序,去重,映射。3. 区间树:判断区间,上下更新值。

2016-08-06 11:54:04 633

原创 POJ1568 四子棋 博弈

1. 必胜:无论对方走什么都可以必胜。即:轮己方走时,有true则true,轮对方走时,全true为true。2. 竞赛中的题目通常是搜到底然后利用alpha-beta剪枝优化,根据兄弟节点的值及时剪枝。3. 人工智能的算法中取max的最大值,min的最小值,再优化,相当于1和-1,这是极大极小值算法。

2016-08-06 11:53:03 2885

原创 uva1625 颜色的长度

1. 另一个递推模板,遍历完上一层,然后下一层就可以利用i-1或者j-1.2. 两个队列的类似最长公共子序列问题常定义状态为,分别移动了多少个元素。3. 复杂代价预处理,然后状态转换时直接调用。4. 滚动数组可以利用多层来表示相邻层次关系,利用t^=1 来进行0和1的状态转换。

2016-08-05 01:00:19 799

原创 uva1626 括号序列

1. 状态转移可以分情况讨论,注意特殊情况。2. 利用j-i递推,利用了递推模板,边界需要处理的提前初始化。3. scanf不读入\n等符号,如果要读入空串需要用fgets或者getchar。4. 递推时,i递减,j从i开始递增,取k做中间标,保证了按照j-i的规律递增,每一次的值都可以利用上一次的值。

2016-08-05 00:59:19 860

原创 uva10003 切木棍 线性区间dp

1. 线性dp,区间思想。2. 动态转移方程:区间代价+此次的代价。3. 下标i,j指的是切割点而不是每一个点。4. 此次代价在底层可以直接返回结果。5. 利用了标准的记忆化搜索模板,如果存在则返回。

2016-08-05 00:58:05 1131

原创 uva10129 欧拉回路 判断出入度数 连通性 遍历压栈

欧拉回路:求度数>>连通性>>遍历找回路

2016-08-05 00:57:08 629

原创 uva10304 Ordering-Tasks 拓扑排序

拓扑排序的邻接表和矩阵实现利用二维数组稀疏表很浪费空间,利用邻接表更好。利用邻接表要堤防重复值。例如:1,3 1,3 二维数组把一个结点赋1,但是邻接表在一个节点下会出现两个值。设置visited数组之后一般不用担心邻接表重复值影响结果。

2016-08-05 00:50:58 481

原创 uva10375 选择与除法 唯一分解定理

1. 对数进行分解方便有效的约分。2. 唯一分解定理:一个数总是有素数的乘积构成。

2016-08-05 00:48:48 2652

原创 uva10562 Undraw-the-Trees 字符题处理 递归

字符串函数的应用,递归处理复杂的字符题

2016-08-05 00:47:51 427

原创 uva10570 外星人聚会 环状序列

环状序列通常有两种方法:1. 延长二倍序列,利用线性模拟环。2. 利用取余改变下标。

2016-08-05 00:46:27 908

原创 uva10817 校长的烦恼 利用-ans

1. 利用int& ans保存当前状态,因为他不会随着下标的改变而改变,防止下表改变而出现的bug。2. 增加维度来解决状态的表示,找明白状态,决策,状态转换。3. 通过记忆化来枚举所有可以完成规定任务的代价看哪个少,通过赋值INF 和 0 来方便比较。

2016-08-05 00:45:19 410

原创 uva11212 编辑书稿 迭代加深

1. 迭代加深,逐层计算。2. 乐观估价函数,剪枝。3. 递归枚举,利用数组保存数据,之后恢复。4. 剪切一个片段并粘贴,最多改变3个后缀。5. 迭代加深的基本框架。

2016-08-05 00:44:17 534

原创 uva11584 划分成回文串 线性dp

1. 状态转移时,常常需要遍历之前的每一种情况来看哪一种情况是最优,比如跳过哪一个串。2. 判断回文串可以从中心位置开始遍历,预处理往往会加快时间。

2016-08-05 00:38:25 426

原创 uva11853 图 范围节点的处理和遍历

如果这个节点有一定范围半径:1. 那么通过圆心距判断是否相交。2. 通过判断圆和边界来判断是否出界。3. 相交的圆进行遍历。

2016-08-05 00:35:32 948

原创 uva11882 最大的数 bfs 遍历估价剪枝

1. 剪枝:利用bfs低复杂度遍历估价和最优解比较,剪枝后避免枚举子集造成的高复杂度时间浪费。2. 利用多次排序从大数开始遍历,或者利用优先队列。3. dfs+bfs剪枝。

2016-08-05 00:34:48 541

原创 uva12166 修改天平 元素的贡献值-最优解

按元素的贡献值求最值的思想

2016-08-05 00:32:00 660

原创 uva12171 sculpture 离散化 3维bfs求面积体积

1. 离散化。2. 状态数组是关键。3. 求面积利用投影和6个方向就可以解决。

2016-08-05 00:28:29 1559

原创 uva12265 抓关键 矩形利用对角两点

1. 题目要抓住关键,这道题的关键是通过矩形的左上角定位矩形。2. 保存可能的最优解,并进行更新的思想。3. 一步一步想,要追求逻辑层次,画出来,不要贪快。例如:行往下遍历,列往右遍历,通过递增计算出来高度,通过一个数组保存可能的解并更新。4. 利用数组下标模拟栈。

2016-08-05 00:15:36 590

原创 百炼 Zipper 剪枝

1. 写代码前一定要写好架构和一些细节。2. 利用变量保存字符串的ascii码值之和进行可行性剪枝。3. 若两字符串中所含各字母个数相同,则ascii值之和相同,反之不然,但大部分都是,可以剪枝。

2016-08-05 00:08:34 459

原创 百度之星 大搬家 递推

1. 递推。2. 找到和前某项的关系,比如进行某种组合或者配合。

2016-08-05 00:08:18 6105

原创 八大基础算法 自己的通俗理解

一些基础算法的理解,包括模拟法的理解。

2016-08-05 00:05:52 3794

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除