032. 我不是菜鸟! 算法青春
冬至將至,冬意渐浓,楚大的新手赛也一天天临近。郭晓川埋首於白书第三部分“竞赛篇”的学习中,进度虽不快,但稳定前进。动態规划这块硬骨头,终於被他啃下了一角。有向无环图、背包问题……这些原本抽象的模型渐渐显露出內在的章法。他意识到,只要能理清问题与子问题之间的逻辑,解题就成功了一半。
从模仿书中代码,到尝试自己推状態转移方程,当完全凭藉自己的分析 ac了几道题后,他感到一种前所未有的通透,好像降龙十八掌学了十五掌般,可以碰一碰曾经毫无头绪的难题了。
比赛那天,和上半年楚大校赛一样仍然是两位学长带队,这次是崔顥和黄兴。只是队伍规模缩水了不少,包括郭晓川在內只有四个新手,一行总共六人,在寒风中显得有些冷清。郭晓川默默跟在队伍后面,手指无意识地蜷缩在口袋里,既期待又忐忑。
新赛场不在超算中心。穿过东方红广场,绕过毛爷爷雕像,一行人走进另一栋楼。熟悉的戴鞋套环节依旧,机房內暖气充足,与外面的寒冷形成鲜明对比。空气中瀰漫著紧张和期待,键盘声尚未响起,却已在每个人心中预演。
也不知这次国御、师大、湘中等学校来了多少人,但偌大的机房座无虚席,热闹非凡。相形之下,云麓仅有的六人队伍显得格外落寞。郭晓川找到自己的座位,手指轻轻拂过键盘,深吸一口气,让自己平静下来。
比赛很快开始。新手赛確实对新手很友好,前三题的难度与暑期集训时相当,郭晓川做得顺风顺水,直衝榜单前列,流畅的解题节奏让他信心渐增。
突然有人出现在近前,將三个顏色鲜艷的气球绑在郭晓川的显示器旁。
气球!上一次拿到气球还是在上次……半年前楚大校赛那唯一的一个。此一时彼一时,人生的第二、三、四个 acm气球,竟隔了半年之久。他轻轻拍了拍饱满的气球,手回到键盘后,又轻快了几分。
经过这段时间对白书的潜心钻研,做题渐渐有了章法,对题目的判断更加准確。每一道题,它需要什么复杂度的算法,在自己的知识体系中,是否存在匹配这个复杂度的解法,都更加清晰。这种日渐增长的掌控感,让他面对赛题时多了几分底气。
顺利通过三道基础题后,郭晓川根据榜单锁定了第四道题,一道结合字符串预处理的数据结构。题目描述略显繁琐,细节要求很多,但凭著平时练习积累的直觉,他將函数模块划分得清晰有序。这道题进行得出乎意料得顺畅,调试几次后便顺利通过。
当第四个气球系上郭晓川的显示器旁,榜单上队友们还停留在两题。
第三题虽然不涉及复杂算法,但需要一点巧思,比赛考的不止是死的算法,也考验思维能力,这正是智力游戏的魅力所在。郭晓川眼中闪过一丝明亮,在思维的竞技场上,他也领先了一回。
第五题。滑鼠悬停在题目连结上,心里已升起一层未知的恐惧。要上难度了吧?根据上一题的难度推测,接下来很可能就是他一直无法逾越的屏障——真正的算法题。
他点开题目,仔细阅读描述。渐渐地,他的呼吸微微收紧,隱约辨认出这可能是一道动態规划,他最近在白书上苦苦钻研,刚刚入门,始终心存敬畏的动態规划。
题目中的条件与约束在他脑中快速组合。他尝试构建状態定义,在草稿纸上演算出复杂的转移方程,根据数据范围估算时空复杂度,太大了,不行。
他深吸一口气,想起这几个月来在白书上啃下的那些艰涩理论,想起无数个深夜与状態转移方程搏斗的时刻。
优化状態定义,压缩维度,空间复杂度理论可行,指尖在键盘上悬停又落下,写了几行代码又刪除。
状態转移是否完整覆盖了所有情况?思路开始混乱。
动態规划是这么艰深而牢不可破吗?究竟什么时候才能在比赛中正面击破,究竟什么时候才能突破那道屏障,难道永远只能做解决简单题的配角?
从小到大不行,试试从大到小?他在草稿纸上试著把题目样例画成箭头连接的状態图,却越画越乱,这不是人能完成的事情。
手速再快有什么用? 1a率再高有什么用?你永远解不出算法题,哪怕只有一点点算法。
他丟下纸笔,扬起头闭上眼。杂念需要扫除,机房的灯光透过眼皮,將眼前照成一片温暖的暗红,题目的状態在眼前徐徐展开,混乱,重来,混乱,重来……
当眼前的图形渐渐加深,无用的信息被一一剥离,题目的信息终於与白书的模型成功擬合,这好像是个……有向无环图!
郭晓川猛地睁眼,在代码中快速敲下一套记忆化搜索。先完成转移条件,再仔细处理递归终点,然后重新整理变量与主函数,小心翼翼地实现数据输入输出。
编译运行,样例通过。
一阵酥麻扫遍全身,满头的汗珠仿佛都在跳动。
提交。
评测队列的状態在疯狂的 f5刷新中变化。
“accepted”
一股热流驀地涌上心头,眼眶瞬间湿润,手还在不自觉地颤抖,一种前所未有的成就感缓缓漾开。
本章未完,点击下一页继续阅读。(1 / 2)