C++的学习,用一句老话说“书山有路勤为径,学海无涯苦作舟”。但只要你肯坚持,多难的算法都能迎刃而解。
为什么要学习算法
算法是C++的一个学习的重要部分,为什么要学习他,就是为了加快你的代码运行速度,拿出最优解。
举个例子:
最大子段和是一个经典例题,学过的人一眼看去,动态规划!但我们反过来想,如果你没有学过动态规划,那样你会怎么做?
P a r t 1 \tt Part\ 1 Part 1
双重循环枚举左端点 L L L 和右端点 R R R,用 s u m sum sum 统计和,之后进行比较,取最大值,但不过这样时间复杂度太高了,换个思路?
P a r t 2 \tt Part\ 2 Part 2
利用前缀和
s
u
m
sum
sum 数组来优化(没学过?看这篇。感谢@凉云生烟 ),区间
[
L
,
R
]
[L,R]
[L,R] 区间和相当于:
s
u
m
R
−
s
u
m
L
−
1
sum_R-sum_{L-1}
sumR−sumL−1
但不过这样复杂度也太高了!
P a r t 3 \tt Part\ 3 Part 3
当然,以上只是列举了两个做法,当然,还有许多做法:深度优先搜索、分治、贪心……但不过有这么多算法,可我们仍然坚定信念,这题做法一定是:动态规划!为什么,因为他是最优解 !
如何学习算法
勤做笔记
这是一个非常重要的事情,清代文学大家章学诚说过:“读书如不及时做笔记,犹如雨落大海没有踪迹。”,笔记是你对当堂课的巩固,所以要勤做笔记!
注意:建议做纸质笔记,电子版笔记需要有固定的集合,方便查找,巩固。
认真听讲
我们赛前冲刺时,我们班的一个人被老师逐了出去,他在老师讲题的时候切屏出去玩游戏,被老师发现了,后面的事情就不过多赘述,总之他这样的行为是不好的。上课时,特别是大赛赛前冲刺时一定要好好听讲,不要弄别的,可能“差之毫厘,谬以千里”,你那一个关键点没听懂,可能后面的都跟不上了。
课后巩固
这一方面,有几点:
- 巩固:建议和“勤做笔记”结合起来,子曰:“温故而知新,可以为师矣”,只要定期进行一个阶段复习,那么你对这个知识的把握就能刚上一层楼。
- 刷题:我们可以去洛谷刷题,题十分全面,而且,建议做题是就像打一场比赛一样,有一个专门的草稿本,去列思路。
- 打比赛:去洛谷与Atcoder,把每一次的比赛当做大赛去对待。
查漏补缺
可以购买书籍,或在网上查阅资料,在这里推荐几本书:
- 深入浅出程序设计竞赛 基础篇,讲的十分详细,印刷质量也很不错,各种算法都有。
- 信息学奥赛一本通,非常经典的教材,但因为教材编写久远,与现在的NOI大纲有些不符。
还有,如果你的老师是在一些可以录播的软件上进行讲解的,可以反复观看,特别是对自己不懂得,可以加深印象。
总结
以上就是我对C++算法学习的总结,谢谢观看。