陈梨闻言,拉着江与微就要走,被江与微拉住。江与微挑眉看他:“是吗?我不信。”说着自顾自地拉开椅子坐下,膝盖不小心撞到宋嘉树伸过来阻拦的长腿,两人就这样在课桌下较起了劲。
“咳咳。”
讲台上,教授清了清嗓子,目光如电地扫过他们仨。宋嘉树不得不收回由于太长而直接伸到了过道上的腿,陈梨这才战战兢兢地跟着坐下,但是颇有些坐立不安。
她小声问江与微,“你认识宋嘉树啊,他好有名的。”
“有名?因为性格差吗?”江与微并没有放低声音。这句话清晰地飘进了宋嘉树的耳朵,让他暗自咬牙,周身的气压更低了。
陈梨赶紧拽江与微,让她别说了,看宋嘉树的表情,她怕江与微被打。
正好,教授也正式开始上课了。
“那么我们就开始吧。”教授的声音听起来非常冷酷,“第一节课,不讲什么深入的东西,先让我对大家的情况有一个基本了解。”
他打开投影仪,“直接看这个问题:给定一个字符串,找到其最长的回文子序列的长度。比如,”他敲了下键盘,幕布显示“babad”,“答案是3,bab或者aba。”
教室里鸦雀无声。对于刚接触算法的学生来说,这个下马威的震感有些强烈。
教授环视一周,“没人有思路吗?你们真是我带过的最差劲的一届。”
宋嘉树上学期挂在这门课上以后,痛定思痛,提前背了很多算法题的标准解法。但此刻看着幕布上的babad,那些背诵记忆像消失了似的,一个字也找不见。
在所有人连呼吸都放轻了,生怕教授注意到自己的时候,宋嘉树左边,一只白皙的手举了起来。
“教授,我可以用一下白板吗?”
江与微站起身,在所有人惊讶的目光中,径直走向讲台,“分情况讨论。”她一边说,一边在白板上利落地书写起来。
“第一种情况,”她写下“s[i]==s[j]”,“那么s[i]和s[j]肯定可以成为回文子序列的两端。第二种情况,”她写下“s[i]!=s[j]”,“这两个字符不可能同时出现在最长回文子序列的两端。所以取子问题中较大的值。”
江与微流畅地写下状态转移方程。
不知不觉中,宋嘉树的目光从白板转移到了江与微的脸上。他上学期啃了无数遍才勉强记住的公式,此刻在她笔下如同呼吸般自然流露。上午的阳光透过阶梯教室的落地窗,给她专注的侧脸镀上了一层柔和的金边。
江与微的字非常漂亮,写完后,她指着幕布上的的例子:“初始化对角线dp[i][i]=1。然后按子串长度递增的顺序填表。”她迅速在黑板上画了一个表格,行云流水地开始填表。
不止宋嘉树,整个教室的目光都聚焦在她身上。
陈梨更是看得目不转睛,满眼崇拜,差点就要来拉宋嘉树的袖子表达内心的激动。
而此刻的宋嘉树正感到一种前所未有的冲击。站在讲台上的江与微身上光芒太耀眼,耀眼到让他感到心悸和眩晕。
教授露出一丝赞许:“非常好,思路非常清晰,这就是动态规划的lps算法。”他走到江与微身边,指着她写下的状态转移方程:“很好。那么基于这位同学的示范,我们立刻进行一轮课堂练习,计入平时分。”
他翻出下一页ppt,赫然又是新的题目:
“给定字符串s,找到最少的分割次数,使得分割后的每个子串都是回文串。例如,“aab”需要1次分割,“a”需要0次。同样使用动态规划解决,限时15分钟。”
教室里顿时响起一片哀嚎。
宋嘉树勉强收回心神,开始尝试思考幕布上的新题目。最小分割次数?他隐约记得这个和lps有关联,但具体怎么关联、状态怎么定义,他想法全无。他上学期背过lps的模板,但面对这个变种,那些死记硬背的东西根本派不上用场。
他僵直着背,瞪着屏幕。
他的左手边,陈梨眼看着江与微回到座位,神色平静地打开vscode,就开始噼里啪啦敲键盘,立刻把脑袋凑过去,打开自己的ide,同步开始手指起飞。
很快,江与微敲下最后一行注释,把代码复制进课堂程序,运行测试,没多久就亮起一个巨大的绿色的“pass”。
她保存好文件,活动了一下身体。转到宋嘉树那一边的时候,正好看到宋嘉树对着空白的屏幕苦大仇深。
昨天被他当众嘲讽的轻微郁气,此刻终于被冲刷得干干净净。江与微爽了。
“怎么样啊,宋学长?”她故意叫他学长,“要不要学妹帮忙?看在前同事的份上,我不至于见死不救的耶。”
“你……”他憋得眼尾发红。
“嘘——”江与微把食指竖着贴在嘟起的嘴唇上,她今天涂了桃色的唇蜜,双唇在阳光下显得晶莹饱满。“这可不是什么光彩的事情,小声一点。”
她睫毛翻飞地上下打量他,“平时分可重要了呢,有时候总分就差那么零点几分,就无缘及格了。你说对吧?”