2021 T3
模拟
队列、分析性质
2021 T4
链表
平面图最小割、最短路、动态规划
普及组:题目只需要简单的分析,更强调算法的应用,通常一个题目只需要一种算法。
提高组:题目需要深入分析,需要对算法本质有一定理解,题目可能需要多种算法综合应用。
3、如何学习提高算法?
学习提高算法更需要了解算法的本质,而非仅仅掌握算法的运用方法。
对于算法,学会运用的方法是最基础的。提高组考察的往往是更深层次的分析能力,看到题目时往往不能直接得到要使用什么算法。如果只是学会了如何简单运用算法,并不能称得上是“学会”了这个算法。
对于一个算法,可以自己在理解算法流程的基础上独立完成实现。
对于一些经典题目,首先尝试独立思考,对于不会的题目,可以查看题解并且深刻理解做法。
对于该专题的练习题目,每道题都给予足够的独立思考时间;如果没有成功想出,需要查看题解并且分析关键思路,以及自己没有想到的原因;在理解做法的情况下,独立写出代码。
如果在面对该专题难度不太高的题目时,有大致思路,或者提示关键思路后可以想到大部分算法,那么可以认为大致掌握了。
4、如何提升思维能力?
在学习算法的过程中,对算法的本质原理大部分都理解了,但是做题的时候总是做不出来怎么办?这种情况下往往需要提升思维能力。
首先,要多进行一下思维题的训练。比较推荐的是AtCoder上的比赛,Codeforces上的比赛也有一些思维题,但是整体质量不如AtCoder。如果比赛能在举办的时候参加最好,赛后vp也是一个好的选择。在线比赛的题目大多数与CSP,NOIP等比赛不同,往往需要在2~3h内解决6~7道题目,对思维的灵活性要求较高,大多数题目不需要复杂的算法和实现,是提升思维能力的不错的途径。
另外,在训练的时候多拓宽一下思维,不要局限于一个思路。如果某个思路尝试了很久都没做出来,并且没有什么有启发的成果,那么很有可能是思路的方向就不对。同一个题目可能有多种解法。
还有,多与其他选手讨论。从比自己强大的选手那里往往可以学习到其他人思考题目的方法,与自己的方法相对比,从而找出更适合自己的思路。
最后是多总结,用训练量来达到提升思维的目的。将大部分的常见技巧和思路都见一遍,并且多进行总结,例如使用这一类技巧时,题目中往往会出现怎样的关键特征?还有一些最基础的思想,例如补集转化,对偶等。
注意:提高思维能力应该与学习新算法同步进行。或者说,提高思维能力应该是一个长久的过程。
5、如何学会综合应用?
在学习完大部分的算法后,只是对某些算法较为熟悉,但是距离真正的做出提高组的题目还差一步。比较有效的练习方法:板刷OJ,打破舒适圈。
针对专题的训练,只能提升对某个算法的理解,但是在比赛时是判断出应该使用什么算法的前提是对问题建立合理的模型,在此之前可能还需要进行一系列的性质分析。
在OJ上随机点开一些题目,在不知道题目类型的情况下进行训练,这样和在比赛中解决一个题的流程是一样的,可以锻炼一个题的思路从无到有的过程。
挑战比自己水平略高的题目,可以打破舒适圈。不仅可以提高自己对算法的理解和解题能力,也能同时锻炼面对压力的能力。同时,这也可以帮助选手有效的查漏补缺。
综上所述,学习提高组算法往往分为三个阶段:
1、学习算法本身,尝试深刻理解算法本质。
2、学会利用算法解决一些基础问题,能够熟练运用算法。
3、能够将算法综合运用,与其他算法相结合。
往往拉开选手之间差距的不是第一步,而是后面两步的能力,选手之间比拼的不是掌握算法的多少,而是解题能力。所以,仅仅学习算法是不足够的,关键的是要能够快速捕获题目中的信息,并且通过分析构成完整的解题步骤,从而快速判断出需要使用的算法,最后进行代码实现。总之,如何在学习提高算法的同时,加深理解,提升思维,是真正应该关注的重点。
总结:首先要打好基础,学习算法本质核心和思想,学会如何简单运用算法。提高思维能力是长久的工作,需要选手持之以恒,多参加比赛,多做一些思维题,不要只局限于学习算法。多练习、多总结、多讨论,提高对题目的分析能力,对特殊条件的敏锐程度,形成自己的做题风格。多独立思考,尝试在没有提示的情况下解决题目,打破舒适圈。确定目标,保持自信,在解题中找到属于自己的乐趣。返回搜狐,查看更多