算法学习方法-针对ACM

知乎抄过来的,自勉 (╯‵□′)╯︵┻━┻

一般要做到50行以内的程序不用调试,100行以内的两分钟以内调试成功;
针对ACM的算法训练计划:

第一阶段:
练经典常用算法,以下算法每个打十到二十遍,同时自己精简代码(因为太常用,所以要练到写时不用想,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上的难题,不要老做那些不用想的题
3、多参加线上比赛,感受比赛气氛,评估自己的实力
4、一道题不要过了就算,与别人交流,有更好的算法也要亲自打一下。
5、做过的题要记好

你可能感兴趣的:(算法学习方法-针对ACM)