刚开始学acm编程竞赛。。需要一些建议或信息。。有的联系我。。再次感谢

受过ACM等编程竞赛训练的人,在算法上有很大的优势,这说明当你的编程能力提高后,主要的时间是花在思考算法上,而不是写程序和调试上。

这里有一个供你练习的计划:

第一阶段:练习经典常用算法。给我把下面每个算法打十到二十遍,同时自己简化代码。因为太普通了,所以要不加思考的练习写作。你可以在10-15分钟内键入程序,甚至可以关掉显示器。

1.最短赛道(弗洛伊德、迪杰斯特拉、贝尔曼福德)

2.最小生成树(先写一个Prim,Kruscal需要一个并集,不太好写)

3.大数(高精度)加、减、乘、除

4.二分搜索法。(代码可以在五行之内)

5.交叉,判断线段相交,然后写一个凸包。

6.BFS,DFS,熟悉哈希表(要熟悉,要灵活,保持代码简单)

7.数学上有:辗转相除(两线以内)、线段相交、多边形面积公式。

8.调用系统的qsort,有很多技巧,可以慢慢掌握。

9.任意系统之间的转换

第二阶段:练习稍微复杂一点,但也比较常用的算法。

比如:

1.二分匹配(匈牙利),最小路径覆盖。

2.网络流,最小费用流。

3.线段树。

4.检查布景。

5.熟悉典型的动态规划:LCS、最长增长子串、三角剖分和记忆dp。

6.游戏算法。博弈树,二分法等。

7.最大的派系,最大的独立团体。

8.判断点在多边形内。

9.微分约束系统。

10.双向广度搜索,A*算法,最小耗散优先。

第三阶段:

前两个阶段是打基础,第三个阶段是锻炼。在比赛中,你可以快速建立模型,想到新的算法。这就需要平时多做综合题。

1.看了oibh上的论文(大概几百篇,我只看了一点点,呵呵)。

2.平时把zoj上的难题扫一扫,不要老是做那些不用想的题。(CUHK acm的版主经常说我选简单的做:-P)

3.多参加线上比赛,感受比赛氛围,评估自己的实力。

4.如果没有通过一道题,就找人问问,有没有更好的算法试试。

5.记住你做过的题:-)