最长公共递增子序列O(n^2)模板——ZOJ2432解题报告- -
ZOJ2432——最长公共递增子序列 WA*2 AC*4
这题象是LIS和LCS的结合。
能想到的最简单的方法就是对a的每一项和b的每一项进行匹配,当找到一个匹配的
时候,就往回找比它小的一个最长公共子列,如a[i]==b[j],就搜a[0,i-1]*b[0,j
-1]这个矩形里面比a[i]小的最长公共递增子列。简化的代码如下:
这样做的效率是O(n^4),明显是不行的。
重新看一下上面的方法,一个最大的问题就是数组的空间没有得到重复的利用。当
a[i]!=b[j]的时候,相应的空间就闲置了。如果能够利用闲置的空间来传递一些信
息,那效率就会有所提高。前面都是把a和b放在对等的地位的,现在考虑用a对b扫
描,然后再对得到的结果找LIS。
这里的复杂度是O(n^3),但还是不行。
考虑到匹配的时候a[i-1]==b[j-1],可以进一步简化推出LIS的过程。
这段代码的复杂度为O(n^2),加上路径记录以后就能AC 2432了。
最长公共递增子序列O(n^2)模板——ZOJ2432解题报告- -
最新推荐文章于 2020-12-17 19:53:57 发布