学会如何思考

学会如何思考

image

一道题目的思考,可以看作一个 DFS 的过程。我们需要找到一个「合法」的优解。

合法,是能解决问题;优解,指这个解法从开想到 AC 的整体难度低。

看了些大佬的文章,感觉很有启发。

这,是模拟退火。

发散

很少有人,在遇到题的那一刻思路就是清晰的。在读完题之后,我们的大脑一般是混沌的。

这一般是发散时刻,我们可以想到很多东西,不管是不是对的,这些东西大部分被我们立即排除。

可能,稍微接受一些解,多花一些时间确定思路,可以增加找到正解的概率。确定出几个备选方向,记下来,一个个想。

数据范围是这个阶段的关键。

逼近

可能在学习 OI 早期阶段,我们凭借大脑里的 trick 和思路快速确定题目解法,这是显然的爬山,完全取决于你的知识树。

可是当随着单步思路变难,思维链变长,完全取决知识树的思考会带来限制,我们需要退火。

增大对一个想法的接受度,可以增加我们找到答案的概率。甚至在有些情况下,对一些看似毫无关系的算法硬套都能发现解法,OI 圈里把这个叫做“生吃”。这个东西需要非常好的状态和耐心,以至于你真的可以严格执行「列出所有可能,依次思考」。

促进转化的发生

有的时候,我们可能以为我们到达叶子了,但是其实还可以往下:

  • 极端情况或许可以帮上忙,找特殊值分析。

  • 转化题意:放到一个模型上(笛卡尔树,坐标 + 莫队)等等。或者尝试描述题目。

  • 反过来:记补集的数量/退背包/去除贡献。

  • 将所有约束规约到一个点上。

  • “本末倒置”,在这种链状思考里,它允许我们 meet in the middle,同时指引目前的方向。

  • 优化,优化。

  • 松弛条件。用容斥啥的做。

  • 手玩找性质。

收敛

有时在思考,总会发现自己的思路可能和正解差一张纸。我们需要练习思维的收敛。

你发现我们有两种不同的方法,每种都差了些:为什么不合并到一起呢?

或者,我们用形式化的语言,描述这些问题。这时就要求思维清晰了。