上一页 1 2 3 4 5 6 7 8 9 ··· 27 下一页
摘要: 传送门 解题思路 一开始想到的是类似0/1分数规划的方法进行二分。 后来发现答案可以贪心解决。 我们可以发现最后的答案一定是由若干权值和相同的集合组成的,因为若其中一个集合的点权和较大,则将其单独拿出来显然更优。 所以可以先dfs一遍用树形dp求出最大的集合的大小ans,再dfs一遍,若扫到某个集合 阅读全文
posted @ 2021-10-09 15:59 尹昱钦 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 观察到一个点的点权最多有8个质因数,所以可以存下来进行dp。 设dp[u][i]表示以u为根的子树中的点到u的gcd为u的第i个质因数的倍数的最大距离。 是不是有点绕。多读几遍。我再加个括号。 设dp[u][i]表示 (以u为根的子树中的点) (到u的gcd为u的第i个质因数的倍数 阅读全文
posted @ 2021-10-09 14:47 尹昱钦 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 树形dp。 用dp[i]表示i的子树中的节点到i节点的最大收益。 Q:如何保证路径上任意时刻的收益非负? A:其实不需要管。因为若某一时刻收益为负,则不会去走,而是从零开始。 AC代码 #include<iostream> #include<cstdio> #include<cst 阅读全文
posted @ 2021-10-09 09:26 尹昱钦 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 哈夫曼树(Huffman Tree),就是一棵树满足叶子节点的权值*到根节点的距离的和最小的树。 一开始假设整个图没有任何连边。 然后贪心思想,每次新建一个节点,取k个权值最小的节点作为这个节点的儿子(相当于把节点合并)。 这样每次少k-1个节点,会导致最后一次合并不满k个节点。 阅读全文
posted @ 2021-10-08 20:07 尹昱钦 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 一直往扫描线方面想,结果自己没想出来,还是运用的不够灵活。 其实很简单,对于查询区间[l,r],答案为左端点小于等于r的区间数-右端点小于l的区间数。 维护两个树状数组即可。 AC代码 #include<cstdio> #include<iostream> #include<cst 阅读全文
posted @ 2021-10-08 19:09 尹昱钦 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 注意所有的砝码都是倍数关系,所以砝码质量的种类数只有log级别。 先用类似进制的方式求出质量尽可能多的装砝码方案。 然后再在其基础上进行贪心调整——砝码质量小的尽可能多用。 所以从小到大进行贪心选择即可(仿照减法借位) AC代码 #include<iostream> #includ 阅读全文
posted @ 2021-10-08 11:34 尹昱钦 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 暴力枚举指数的复杂度是 \(O(p)\) 的(费马小定理) 所以用分块思想。 将 \(l\) 分成 \(\sqrt p\) 块,每块的长度为 \(\sqrt p\)。 先预处理出 \(i=1\to \sqrt p\) 时 \(b^i\bmod p\) 的值,开个map存下值所对应的 阅读全文
posted @ 2021-10-08 09:02 尹昱钦 阅读(81) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 可以自己取一个大质数当做模数,或者直接利用unsigned long long的溢出。 进制也可以选择一个较小的质数,如13131或者15151等。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #includ 阅读全文
posted @ 2021-10-08 07:53 尹昱钦 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 首先很显然可以贪心进行选择,枚举哪个数字有k个,然后优先绝对值更靠近他的数字,即可算出最小代价。 下一个要求是字典序最小。 还是先删掉绝对值靠近他的点,先从前往后正序删比他的的数字,再从后往前逆序删比他小的数字,即可保证字典序最小。 AC代码 #include<iostream> 阅读全文
posted @ 2021-10-08 07:44 尹昱钦 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 概括一下题意:求字符串中abababa子序列的个数。 考虑dp。 设dp[i]表示以子序列第i位结尾的方案数。 显然第i位是'a'时dp[i]才不为0。 转移方程为: \(dp[i]=1+\sum_{j=1}^k dp[j]\) 其中k为上一个b出现的位置。 显然可以边求dp边记录 阅读全文
posted @ 2021-10-08 07:33 尹昱钦 阅读(53) 评论(2) 推荐(0) 编辑
摘要: 传送门 解题思路 按照字符在a中出现的位置映射到b字符串中。 求逆序对数即为答案。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<iomanip> #include<vector 阅读全文
posted @ 2021-10-08 00:15 尹昱钦 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 先预处理出以1为根节点的各节点的size。 定义一个节点的size为以这个节点为根的子树的a的和。 然后求出ans[1],再进行换根dp求出每个节点的ans,比较大小输出即可。 AC代码 #include<iostream> #include<cstdio> #include<cs 阅读全文
posted @ 2021-10-07 23:39 尹昱钦 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 好板子啊。 要不是是个省选题 我才不写博客呢。 树剖完了,就是单点修改+区间修改+区间求和。 线段树维护即可。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<a 阅读全文
posted @ 2021-10-04 15:35 尹昱钦 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 传送门 Lucas定理 OI-Wiki讲的太好了:http://oi-wiki.com/math/number-theory/lucas/#lucas 做一下总结补充解释: \((a+b)^p\equiv a^p+b^p \pmod p\) \(f^p(x)\equiv f(x^p) \pmod p 阅读全文
posted @ 2021-10-03 19:11 尹昱钦 阅读(60) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 田忌赛马这道题的加强版。 收回我不能用贪心来解决的话。 排序后每个序列都用两个指针记录已经使用的数的位置。(一定先使用两边) 具体策略为: 若最大的比对方大,则最大的上。 若最小的比对方大,则最小的上。 否则就用最小的打对面最大的。 AC代码 #include<iostream> 阅读全文
posted @ 2021-10-01 18:37 尹昱钦 阅读(29) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 27 下一页