上一页 1 ··· 104 105 106 107 108 109 110 111 112 ··· 132 下一页
摘要: 这道题目可以二分 求出二维前缀和,枚举每一个顶点,然后二分正方形边长,显然具有单调性,时间复杂度为\(O(n^2logn)\) 如果\(n\)为\(5000\)怎么办? 这个时候要用到DP 说明一下正确性 假设我们的\(min\)取的是\(f[i-1][j]\),如下 那么对当前这个顶点的正方形就是 阅读全文
posted @ 2024-01-18 16:14 最爱丁珰 阅读(22) 评论(0) 推荐(0)
摘要: 回文串一般可以考虑把串倒过来思考问题 对一个给定的串,我们将其倒序,设其长度为\(l\),求出原串和倒序的串的LCS,设长度为\(x\),则答案为\(l-x\) 证明: 我们假设已经获得了最终的回文串,然后我们将这个回文串倒序,那么肯定这个回文串与这个原串是相等的 以样例为例 其中红色字符是添加的字 阅读全文
posted @ 2024-01-17 23:51 最爱丁珰 阅读(46) 评论(0) 推荐(0)
摘要: 再拓展一下LCS的滚动数组 阅读全文
posted @ 2024-01-17 22:36 最爱丁珰 阅读(9) 评论(0) 推荐(0)
摘要: 第一问不说了,主要是第二问 第二问考虑贪心,利用数学归纳法证明 这里还有一种贪心策略,就是从右边往左边考虑,但这样好像证不出来 因为这是NOIP的题嘛,没有那么难,看到序列最优化的问题往贪心或者DP上面想喽 当然介绍一个定理 阅读全文
posted @ 2024-01-17 22:07 最爱丁珰 阅读(14) 评论(0) 推荐(0)
摘要: 普通的LIS问题的时间复杂度是\(O(n^2)\),瓶颈主要是在方程\(f[i]=1+max(f[j])\),其中\(1≤j<i\)且\(a[j]<a[i]\)中寻找\(j\)上 我们尝试用贪心优化,这里的\(j\)就是小于\(i\)的比\(a[i]\)小的且\(f[j]\)最大的\(j\) 根据贪 阅读全文
posted @ 2024-01-17 21:34 最爱丁珰 阅读(38) 评论(0) 推荐(0)
摘要: 这个是对\(f[i]\)数组的扩展,\(f[i]\)求的是\(A\)的后缀与\(B\)的前缀匹配的最大长度,而这道题目是求\(A\)的前缀与\(B\)的前缀匹配的最大长度 注意不能简单地将\(A\)翻转然后跑KMP,因为\(A\)翻转了匹配的方向不会翻转。比如说\(ABC\)与\(AB\)匹配长度为 阅读全文
posted @ 2024-01-17 20:15 最爱丁珰 阅读(18) 评论(0) 推荐(0)
摘要: 我们先证明这个子矩阵一定可以放在左上角 假设我们在原矩阵中随便取一个矩阵(这个矩阵不与四条邻边挨着),然后让这个矩阵无限的复制延伸可以覆盖原来的矩阵,那么重新选取一个矩阵,这个矩阵是我们最开始选取的矩阵的每一列往左边走一位而行不变的矩阵,比如下面 其中黑色矩阵是我们最开始选取的矩阵,橙色矩阵是我们现 阅读全文
posted @ 2024-01-16 23:54 最爱丁珰 阅读(42) 评论(0) 推荐(0)
摘要: 这道题目就是一个二维hash模板 讲一下二维哈希 二维的数据结构一般都是先对一个既定的行做列(一维)上的操作,然后再把若干列当成一维处理行(数组指针指向一个二维数组就可以这么理解) 设\(hash[i][j]\)表示前\(i\)行前\(j\)列的矩阵的hash值 我们先对列做hash(设进制数为\( 阅读全文
posted @ 2024-01-16 21:50 最爱丁珰 阅读(35) 评论(0) 推荐(0)
摘要: 蓝书上的hash函数一般都是在循环同构串的时候用,因为这个时候可以完美避免起点以及方向的问题 当然其实涉及了循环同构串了建议还是直接上最小表示法吧 阅读全文
posted @ 2024-01-16 20:28 最爱丁珰 阅读(23) 评论(0) 推荐(0)
摘要: 具体解法见LYD蓝书 这里主要讲一下为什么只用判断\(next[i]\),而不用继续判断\(next[next[i]]\)或者\(next[next[next[i]]]\)等等 主要是有以下几个结论: 如果\(s[1\)~\(i-next[i]]\)不能作为\(s[1\)~\(i]\)循环元,那么\ 阅读全文
posted @ 2024-01-16 19:48 最爱丁珰 阅读(22) 评论(0) 推荐(0)
上一页 1 ··· 104 105 106 107 108 109 110 111 112 ··· 132 下一页