什么是AK王道?

什么是AK王道?

机房的空调嗡嗡转着,屏幕光漫过沈明指尖的笔帽。他盯着第三题的样例输出,草稿纸上的状态转移方程划了又改——刚才的思路漏了边界条件,得回到最开始的定义:dp[i][j]代表前i个物品用j容量时的最大价值,那i=0的时候,不管j是多少,结果都该是0。

旁边的林晓突然拍了下桌子:\"我过了!\"她的屏幕上跳出众测全绿的提示,节跳动的竞赛页面亮起\"All Killed\"的标识。沈明抬头,看见她桌上摊着的《算法导论》,折角刚好停在\"动态规划的最优子结构\"那章——上周他们讨论背包问题时,林晓说\"别记模板,要想清楚每一步为什么存在\"。

这是我第一次真切摸到\"AK王道\"的轮廓。不是赛场上突然爆种的运气,不是刷过三千题的肌肉记忆,是沈明改到第三版的草稿纸,是林晓折角的教材,是他们对着一道题抠三小时,只为确认\"这个条件为什么能推出那个结论\"的固执。

上个月校赛,周阳拿了AK。颁奖时有人问他\"秘诀\",他举着自己的错题本——每道题下面都写着\"错误原因:忽略了向图的双向边\" \"优化方向:用前缀和代替双重循环\",甚至有一道贪心题,他画了三张图,标着\"为什么排序依据是a/b而不是a+b\"。后来我翻他的代码仓库,看见一道最短路题的提交记录:从超时的Floyd,到优化成Dijkstra,再到加上堆优化,最后释里写着\"其实可以用SPFA,但Dijkstra的稳定性更题意\"。

原来AK从不是终点。去年省赛,我卡在最后一题的几何计算,眼看时间要到,慌慌张张套了模板,结果因为精度误差错了三个点。赛后看题,发现正确做法是用向量叉积判断方向——而我早忘了大一学析几何时,老师说\"向量是几何题的骨头\"。那时我才明白,我追求的是\"做对题\",而真正的AK者追求的是\"懂题\"。

上星期做蓝桥杯的模拟题,一道数论问题卡了我两天。直到某天吃早饭,突然想起大二学欧拉函数时,老师讲\"互质的数的乘积模n等于1\",我拍着脑门往机房跑——原来问题的核心是\"模逆元的存在条件\",而我之前一直绕在\"快速幂怎么写\"里。当我写出正确代码,看见屏幕上全绿的测试用例时,没有狂喜,只有一种\"终于把东西拼对了\"的踏实。

昨天晚自修,沈明在黑板上写\"AK王道\"四个大,下面补了一行小:\"把每道题当成一次对话,不是你征服它,是你理它。\"林晓接着说:\"上次我做符串题,想了两小时,最后发现答案就在KMP算法的next数组里——我之前学KMP时,只记了怎么找子串,没懂next数组是前缀后缀的最长匹配。\"

机房的钟指向十点,沈明关掉电脑前,把第三题的代码再看了一遍:边界条件加了,循环变量的起始值改了,释里写着\"这次应该没问题\"。林晓的错题本又多了一页,标题是\"第三题的三种法对比\"。我望着窗外的月光,突然懂了:AK王道从来不是\"全对\"的结果,是你为一道题死磕的三个小时,是你翻开教材找本质的固执,是你把\"我会做这题\"变成\"我懂这题为什么要这么做\"的清醒。

就像今早食堂的豆浆,要熬够火候才会香;就像沈明的草稿纸,要划够三版才会对。AK王道是慢的,是笨的,是对着一道题抠细节抠到凌晨,是把每个知识点嚼碎了咽下去——不是为了某场比赛的全对,是为了下次遇到类似的题时,能笑着说:\"哦,我知道它的根在哪儿。\"

机房的门被推开,风卷着银杏叶飘进来。沈明的代码编译通过,屏幕上跳出\"Accepted\"的提示。他转头对我们笑:\"你看,这次没漏边界条件。\"窗外的银杏叶落在林晓的错题本上,刚好盖住\"最优子结构\"那四个。

这就是AK王道。是每一笔都写清楚\"为什么\"的草稿纸,是翻到折角的教材,是对着一道题死磕到底的认真——不是追求全对的执念,是对问题本质的虔诚。

延伸阅读: