我年轻的时候也觉得ACM考察的是算法和coding
ACM中常用的算法有哪些?
原创
©著作权归作者所有:来自51CTO博客作者jishudi的原创作品,请联系作者获取转载授权,否则将追究法律责任
年纪大了以后,我明白了,ACM考察的其实是YY
有算法的题都是秒杀题,
难题都是YY一个方法,或是做一个畸形的变化转成一个有固定解的模型
一位高手对我的建议:
一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功.acm主要是考算法的
,主要时间是花在思考算法上,不是花在写程序与debug上。
下面给个计划你练练:
第一阶段:
练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,
因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打
出来.
1.最短路(Floyd、Dijstra,BellmanFord)
2.最小生成树(先写个prim,kruscal要用并查集,不好写)
3.大数(高精度)加减乘除
4.二分查找.
(代码可在五行以内)
5.叉乘、判线段相交、然后写个凸包.
6.BFS、DFS,同时熟练hash表(要熟,要灵活,代码要简)
7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式.
8.
调用系统的qsort, 技巧很多,慢慢掌握.
9. 任意进制间的转换
第二阶段:
练习复杂一点,但也较常用的算法。
如:
1. 二分图匹配(匈牙利),最小路径覆盖
2.
网络流,最小费用流。
3. 线段树.
4. 并查集。
5.
熟悉动态规划的各个典型:LCS、最长递增子串、三角剖分、记忆化dp
6.博弈类算法。博弈树,二进制法等。
7.最大团,最大独立集。
8.判断点在多边形内。
9.
差分约束系统.
10. 双向广度搜索、A*算法,最小耗散优先.
第三阶段:
前两个阶段是打基础,第三阶段是锻炼在比赛中可以快速建立模型、想新算法
。这就要平时多做做综合的题型了。
1.
把oibh上的论文看看(大概几百篇的,我只看了一点点,呵呵)。
2.
平时扫扫zoj上的难题啦,别老做那些不用想的题.(中大acm的版主经常说我挑简单的来
做:-P )
3.
多参加网上的比赛,感受一下比赛的气氛,评估自己的实力.
4. 一道题不要过了就算,问一下人,有更好的算法也打一下。
5. 做过的题要记好
逻辑类:枚举、贪心、动态规划、深搜广搜
结构类:栈、并查集、堆、树、拓扑图、图论
几何类:凸包
公式类:Fibonacci,排列组合,概率
几何类的小算法很多,比如求点线关系;还有线性方程组、最大最小流;还有一些特定的算法:最短路劲、排序等。
我感觉最其中重要的是 搜索, 搜索可以对大部分问题提供通解,但会有效率问题,于是有双向广搜、A星搜索等等。在现实应用中,我觉得相对其他一些来讲,搜索也是比较有用的。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
acm算法扫盲-基本算法
1.枚举: 出处:ACM枚举法讲解和练习 使用特点: 数学模型参数专题...
贪心算法 枚举法 归并排序 -
acm算法扫盲-图论
1.拓扑排序: acm-图论-拓扑排序2.最小生成树: 最小生成树的
最短路 缩点 双连通分量 -
ACM模板(数学算法)
。。
算法 #define 快速幂 快速乘法 -
ACM OI专题 知识题目分类
图论二分图匈牙利算法HK算法最小路径重复点覆盖最小路径点覆盖最大独立集最小点覆盖KM算、
并查集 最小路径 连通分量 带权并查集 割点