摘要: 二分答案有一个很显著的特征:一定存在一个临界值,单调性只是临界值的一种,而不是全部。 临界值,就是寻找第一个/最后一个满足要求的值,这又分别对应着两个完全不同的二分模板,这里做题时推荐使用“第一个满足要求的值”,即对应着 STL 中的 upper_bound ,手写板对应着 这篇文章 里讲的模板。 阅读全文
posted @ 2024-07-23 22:27 KS_Fszha 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 依据值域的 \(O(n^2)\) 做法 这种做法只适用于这种值域小的题,下一种做法才是求等差数列的通解。 我们定义 \(f[i][j]\) 表示以 \(h_i\) 为最后一个数,公差为 \(j\) 的等差数列(长度 \(\ge 2\) ) 的个数。 接下来我们找每一个数前面的数,确定公差后转移即可。 阅读全文
posted @ 2024-07-23 15:33 KS_Fszha 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 题目:绝世好题。 暴力 dp 显然 \(O(n^2)\) 转移即可。 单调队列优化 观察到只有某二进制位两个数都为 \(1\) 时才能转移,因此我们把每个二进制位开一个单调队列,然后对于一个数 \(a\) ,找到它是 \(1\) 的二进制位并选其单调队列的队头进行转移,在这之后把这个数加入符合要求的 阅读全文
posted @ 2024-07-22 21:14 KS_Fszha 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 题目:编辑距离 。 思路 显然,定义 \(f[i][j]\) 表示字符串 \(a\) 中前 \(i\) 个字符到 字符串 \(b\) 中前 \(j\) 个字符的编辑距离。 那么对于 \(a_i=b_j\) 时,我们对当前位无需进行任何编辑操作,则 \(f[i][j]=f[i-1][j-1]\) 。 阅读全文
posted @ 2024-07-22 15:20 KS_Fszha 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 朴素算法 不必多说,\(O(n^2)\) 的暴力 dp 转移。 优化算法 时间为 \(O(n \log n)\) ,本质是贪心,不是 dp 。 思路是维护一个单调栈(手写版),使这个栈单调不降。 当该元素 \(\ge\) 栈顶元素时,把这个元素压入栈中。 否则,在单调栈中找到第一个大于该元素的项,把 阅读全文
posted @ 2024-07-22 12:33 KS_Fszha 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 二分最佳模板 阅读全文
posted @ 2024-07-21 23:57 KS_Fszha 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 很好的构造+01BFS的图论建模题,运用了把有后效性 dp 转化为最短路问题的 trick 。 阅读全文
posted @ 2024-07-15 00:59 KS_Fszha 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 概述 大致分为以下几类: 01背包 完全背包 多重背包 混合背包 二维背包 分组背包 依赖背包(树形背包) 以及一个变式:跳楼梯模型,本质是转移顺序的改变。 背包题基本上没有套路,只能靠多练题,总结思路,最重要的还是把问题抽象成背包模型的能力。 01 背包 特点:无序加入,每个物品加一次。 完全背包 阅读全文
posted @ 2024-07-09 16:57 KS_Fszha 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 我是傻逼 阅读全文
posted @ 2024-07-07 22:02 KS_Fszha 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 旋转坐标轴的 trick 和二维差分的综合运用。 阅读全文
posted @ 2024-07-06 17:06 KS_Fszha 阅读(8) 评论(0) 推荐(0) 编辑