上一页 1 ··· 4 5 6 7 8
摘要: 非常综合的一道 dp 好题。 先对 \(x\) 排序。 首先可以想到这题的关键的是最大的 \(S\) ,其次是最小的面积。所以这个长度就是最长上升子序列的长度,所选的 \(S\) 也必须是一个 LIS ,像这样选一个 LIS 的题目可以对数据分层,\(f_i\) 是 \(i\) 为右端点的最长上升子 阅读全文
posted @ 2025-02-10 15:47 hnczy 阅读(130) 评论(0) 推荐(0)
摘要: 分块学习笔记 分块是基于区间修改和查询的工具。 用一道题来引入: 给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值。 #6277. 数列分块入门 1 这道题如果用暴力来求解的话,需要 \(O(n^2)\) 的时间复杂度,这样我们是不满意的,那怎么办呢?我们想到,如果 \(l=1,r=n 阅读全文
posted @ 2025-02-10 14:27 hnczy 阅读(108) 评论(0) 推荐(0)
摘要: 同余最短路学习笔记 前言 因为没有做出来简单的同余最短路,遂来写一篇学习笔记涨涨记性。 正文 同与最短路,其实是一种类似完全背包的算法,求的东西都是一样的,但是同余最短路可以求的范围更广。 通常情况下表达式都是 $\sum_{i=1}^{n} a_ix_i =b $ 是否可行的情况。 这里的 \(a 阅读全文
posted @ 2025-02-10 14:22 hnczy 阅读(117) 评论(0) 推荐(0)
摘要: 树状数组学习笔记 树状数组的使用场景:可差分且有结合律的运算符,如 ^ + * 树状数组优点:编码简单,常数小,但思维量较大。 板子: struct B_tree { int c[N]; void clear(){ memset(c,0,sizeof c); } void add(int x,int 阅读全文
posted @ 2025-02-09 12:49 hnczy 阅读(139) 评论(0) 推荐(0)
摘要: 数位dp的标志: 要求统计满足一定条件的数的数量(即,最终目的为计数); 这些条件经过转化后可以使用「数位」的思想去理解和判断; 输入会提供一个数字区间(有时也只提供上界)来作为统计的限制; 上界很大(比如 \(10^{18}\)),暴力枚举验证会超时。 数位dp的模板题 A - 不要62 实现非常 阅读全文
posted @ 2025-02-09 12:48 hnczy 阅读(146) 评论(0) 推荐(1)
摘要: 矩阵乘法 对于线性简单的 dp 可以使用矩阵快速幂加速转移,可以从 \(O(n)\) 的时间复杂度降到 \(O(k^3\log n)\) ( \(k\) 为矩阵的大小,通常小于10) 先给出矩阵乘法的模板代码: struct MAT { int c[15][15],n,m; MAT() { mems 阅读全文
posted @ 2025-02-09 12:47 hnczy 阅读(122) 评论(0) 推荐(0)
摘要: 斜率优化dp 的小总结 首先下凸包/上凸包的求法可以使用单调队列/单调栈来实现。 #include <bits/stdc++.h> #define int long long using namespace std; const int N = 5E5 + 5; struct node { int 阅读全文
posted @ 2025-02-09 12:47 hnczy 阅读(90) 评论(0) 推荐(0)
摘要: 一道非常综合的背包题。 我们发现每一个点的选择对它的父亲的合成有影响。 这样的话我们可以尝试把这个因素记下来。 \(f_{rt,i,j}\) 来表示 \(rt\) 及它的子树中选择 \(i\) 个作为合成的材料的话,花费 \(j\) 的最大战斗力。 这样的话我们就可以直接用多重背包来写了。 先枚举 阅读全文
posted @ 2025-02-09 12:45 hnczy 阅读(102) 评论(0) 推荐(0)
上一页 1 ··· 4 5 6 7 8