摘要:
小结论 数学相关: \(\displaystyle\sum_{k=1}^n \frac{1}{k} = \ln n\) \(C_n^m = C^{m-1}_{n-1} +C^m_{n-1}\) \(C^m_n = \frac{n}{m} * C^{m-1}_{n-1}\) \(C^0_n + C^1 阅读全文
摘要:
模拟赛上出了此题, 大概是本蒟蒻唯一ac的题了 考场上第一眼康到这道题时, 因为只涉及路径上最小值最大的问题, 所以想到了货车运输, 跑出它的最大生成树,由最大生成树的性质可知, f(p, q) 必定在新建的树上的路径上 题目中让求所有点对的f值之和, 好像不太好求, 所以我们分别考虑每条边对答案的 阅读全文
摘要:
机房大佬讲解后, 写一写题解 这是很经典的邻接矩阵乘法了 对于邻接矩阵G\[i][j] 表示i到j有没有边 如果是$G^1$ , 发现就是原矩阵, G\[i][j]可以理解为从i走一步到j的方案数 下面考虑$G^2$ 矩阵乘法代码: cpp Matrix operator (const Martix 阅读全文
摘要:
折半思想 将一个问题已暴力的时间复杂度确定一半, 在以较小的时间复杂度搞定另一半, 统计答案 Promble 1 Mark Douglas 是一名律师。他的客户 Yuri Ball 在一场车祸中不幸去世。为了帮助 Yuri 的亲属拿到他的遗产, Mark 需要得到一个密码。在 Yuri 的笔记本上, 阅读全文
摘要:
思路: 贪心 + dp 首先贪心按身长加手长排序, 也就是让最难出去的先出去 但也有可能有人手短身子长, 那他奉献自己可能更优 所以在加个背包dp 代码: cpp include include include include using namespace std; const int N = 2 阅读全文
摘要:
贪心+dp 好多题都是这个思想, 可以说是非常重要了 思想一: 在不确定序列无法dp的情况下, 我们不妨先假设序列已经选定, 而利用贪心使序列达到最优解, 从而先进行贪心排序, 在进行dp选出序列 思想二: 最优解一定满足上一个状态在某 Problem 1 n 座楼房,立于城中。 第 i 座楼,高度 阅读全文
摘要:
"P2486" 很经典的题~ 思路: 线段树染色+"熟练"剖分(某些出题人总是喜欢把序列上的题加个树链剖分搞到树上去) 先想一想序列上怎么做吧 ~~线段树是个好东西~~ 每个节点维护三个信息: ls: 左端点的颜色 rs: 右端点的颜色 cnt: [l, r] 中共有几个颜色段 合并? fa.cnt 阅读全文
摘要:
二分图匹配 "P1129" 这个题还是有一定套路的 将黑色格子所在的行和列连边, 跑一边最大匹配, 如果是完美匹配即可(所有点都是匹配点) why? 在完美匹配的情况下 假如 列1 行5 , 列4 行1 ( 表示匹配) 我们则可以将行5和行1换一下位置, 这样交换 列不会受到影响, 匹配变为列1 行 阅读全文
摘要:
形式:求n个点____ 的个数 有标号无向图的个数(不一定联通): $2^{C_n^2}$ 证明显然 有标号无向联通图个数: 设g(x)为不一定联通图的个数, f(x) 为连通图个数 枚举1号点所在联通块的大小 $g(x) = \displaystyle \sum_{i=1}^{n}{n 1 \ch 阅读全文
摘要:
冒泡排序深入理解 对于冒泡排序有一个小性质: 每一次都会把序列未排好序的最大数"沉底", 即推到序列尾部 1.P4378 Out of Sorts S 留意着农场之外的长期职业生涯的可能性,奶牛Bessie开始在不同的在线编程网站上学习算法。 她到目前为止最喜欢的算法是“冒泡排序”。这是Bessie 阅读全文
摘要:
状态压缩 "P5369" 题意:求所有排列下的最大前缀和之和 一步转化: 求最大前缀和的前缀由数集S组成的方案数, 统计答案时直接乘上sum(S)即可 考虑最大前缀和的性质: 设最大前缀和为sum[i] 1. 到i的后缀均为正数 2. i后的前缀均为负数 令sum[i] = 集合 i 内所有数的和。 阅读全文
摘要:
第一眼能看出来是个dp O($n^3$) 暴力应该很好想 dp\[i][j] = $\sum_{k=1}^i [a[k] include include include using namespace std; const int N = 1005; const int P = 1e9+7; int 阅读全文
摘要:
首先进行一步转化 $a_j \leq a_i + q sqrt(abs(i j))$ $a_i + q \geq a_j + sqrt(abs(i j))$ 即 $q = max (a_j + sqrt(abs(i j))) a_i $ 我们对$i \geq j 和 j i$ 分类讨论, 其实解决一 阅读全文
摘要:
"P3943" 思维好题 接下来, 您将看到 : 差分(??!) bfs 状压dp 第一波操作(差分): d[i] = a[i] ^ a[i 1] 例子: 10011100 (0表示不亮, 1为亮了) 它的"差分"数组为 11010010 吃瓜群众: 为什么要这么表示 let's 模拟 it 原状态 阅读全文
摘要:
这个套路还是蛮常见的 思路: 将操作分为两类, 大于$\sqrt{n}$ 的, 和小于它的 为什么要这么干 考虑暴力 , 每次修改$O(1)$ , 每次查询$O(n)$ 那么它的复杂度是$O(n^2)$ 的 观察发现, 修改的复杂度远小于查询, 导致复杂度不平衡 考虑在修改时预处理以降低查询复杂度 阅读全文
摘要:
"P1502" st表 + 并查集 回顾: st表 f\[i][j] 为序列中 i ~ i + $2^j$ 1中的最大(小)值 预处理 f\[i][0] = $a_i$ , f\[i][j+1] = max(f\[i][j], f\[i + (1 include include using name 阅读全文
摘要:
介绍一个无建树做法 个人认为我的代码比较易懂(~~简直不需要注释~~) 定义dp\[x][0/1/2] 分别为x节点染绿 /红 /蓝 情况下子树中最多有几个点被染成绿色 类似的 f\[x][0/1/2] 为最少有几个点 见代码: c++ include include include using n 阅读全文