摘要:
ZOJ - 3703 思路: 背包dp 为了使最后的罚时最少,先按做题所需时间排序 运算符重载方便背包转移。 代码: 阅读全文
摘要:
最大流: 给定指定的一个有向图,其中有两个特殊的点源S(Sources)和汇T(Sinks),每条边有指定的容量(Capacity),求满足条件的从S到T的最大流(MaxFlow)。 最小割: 割是网络中定点的一个划分,它把网络中的所有顶点划分成两个顶点集合S和T,其中源点s∈S,汇点t∈T,从S出 阅读全文
摘要:
D - Kay and Snowflake 思路: 树的重心 利用重心的一个推论,树的重心必定在子树重心的连线上。 然后利用重心的性质,可知,如果有一颗子树的大小超过整棵树的大小的1/2,那么树的重心一定在这颗子树上。 利用以上两条,可知: 如果没有一颗子树的大小超过整棵树的大小的1/2,那么就可以 阅读全文
摘要:
模板: 阅读全文
摘要:
C3 - Encryption (hard) 思路: 记sum[i]表示0 - i 的和对 p 取模的值。 1.如果k * p > n,那么与C2的做法一致,O(k*p*n)复杂度低于1e8。 2.如果k * p <= n 那么根据抽屉原理,必有k个sum[i]相同, 那么任意取k - 1个相同的 阅读全文
摘要:
C2 - Encryption (medium) 思路: 传统的dp: dp[i][j] 表示到第i个位置为止,分成j段的最大值 dp[i][j] = max(dp[l][j-1] + (sum[i] - sum[l]) % p) 0<= l < i 优化的dp: 我们发现n很大,但是p很小 于是 阅读全文
摘要:
牛顿迭代法: 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。 详见:https://www.matongxue.com/madocs/205.html#/m 阅读全文
摘要:
1008 思路: 总共有m^n次方种方案,其中相邻两个都不相同的有m * (m - 1) ^ (n - 1)种,两者相减就是答案 代码: 阅读全文
摘要:
1026 思路: 数位dp 代码: 阅读全文
摘要:
字典树 简介:字典树,又称单词查找树,Trie树,是一种树形结构,是哈希树的变种。 优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较。 性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符; 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串; 每个节 阅读全文
摘要:
Worst Case 思路: 使 a <= b 当 a == b 时 或者 a == b - 1 时,答案显然为 2 * (a - 1) 否则找到最大的 c ,使得 c * c < a * b 如果 c * (c + 1) >= a * b ,那么可以构造 c - 1 + c 个 数对 ,减去 一个 阅读全文
摘要:
961E - Tufurama 思路: 线段树或者分块 遍历 1 - n - 1,求 区间[i + 1, min(a[i], n)]大于等于 i 的个数,累加起来 线段树: 分块: 阅读全文
摘要:
960F - Pathwalks 思路: ORZ 杜老师 用map写1e5个树状数组,骚操作 记Q为query和update次数,则节点个数约为Q*log(N) 代码: 阅读全文
摘要:
960D - Full Binary Tree Queries 思路: 用move1[i]记录第i层第1种操作移动的个数(对这一层的个数取模) 用move2[i]记录第i层第2种操作移动的个数(对这一层的个数取模) 查询方法: 记当前值为 x,当前层为 i,则经过操作后,他到了 x + move1[ 阅读全文
摘要:
Binary Tree Restoring 思路: 递归 比较a序列和b序列中表示同一个子树的一段区间,不断递归 代码: 阅读全文
摘要:
Seven Segment Display 思路: 经典数位dp 代码: 阅读全文
摘要:
813E - Army Creation 思路: 线段树+二分 先预处理每个点往后走k步的下标 线段树二叉树的每个节点用vector维护这些下标,给这些下标排个序 询问区间L,R,那么把下标小于等于R的位置都减掉,因为只要后面连续k个就够了 代码: 阅读全文
摘要:
946D - Timetable 思路: 分组背包 每组物品最多选1个 v[i]表示对于这天来说减掉i节课后最多能减少多少小时的在校时间 代码: 阅读全文