- 博客(5)
- 收藏
- 关注
原创 学习笔记(数论)
CF1139D 最后一个整除分块 + 前缀和 复杂度O( sqrt(m) ) 预处理O(m),所以没必要整除分块了~ #include <bits/stdc++.h> #define ll long long #define endl '\n' using namespace std; const int maxn=1e5+5; const int mod=1e9+7; int prime[maxn],inv[maxn],mo[maxn],cnt=0; bool vis[maxn]; vo
2020-09-29 13:41:10
105
原创 学习笔记(DP) 刷题日记
Codeforces 1268B 贪心的思想,从右往左把每列都取完或剩下一个(取余2)。 观察画图可以发现,若剩下一个的两列之间间隔列数为偶数的话,是可以通过最底下一行使得这两列剩下的那一个合并使得贡献加1。 #include <bits/stdc++.h> #define ll long long #define endl '\n' using namespace std; const int maxn=3e5+5; stack <int> s; int main(){ ios:
2020-09-06 15:05:44
155
原创 学习笔记(DP)— 状压
状压DP练习 1.SCOI2005互不侵犯 dp[i][j][k]表示当前第i行,状态为j,已用k个国王的方案数 其中j是一个二进制串,表示当前各个位置是否拜访国王 枚举当前行与上一行,判断两行摆放的情况是否合法 预处理:枚举单行情况,若没有2个相邻的1 ( i & (i << 1) == 0 ),则该情况合法,利用lowbit,计算出该种合法情况有几个国王(几个1),s数组用来存状态,sum数组用来存该状态1的个数 #include <bits/stdc++.h> #def
2020-08-30 16:17:18
93
原创 学习笔记(DP)— 背包问题
[DP] 背包问题 ———————————————————————————————————— 注意枚举顺序!! for (int k = 1; k <= ts; k++) // 循环每一组 for (int i = m; i >= 0; i--) // 循环背包容量 for (int j = 1; j <= cnt[k]; j++) // 循环该组的每一个物品 if (i >= w[t[k][j]]) dp[
2020-08-29 17:04:49
110
原创 学习笔记(数据结构)— 主席树
** 学习笔记-主席树 ** 用途:查询区间第k大 核心思想:前缀和,权值线段树 过程 (1)对于每一个点都建一颗权值线段树,表示到当前节点各个数出现了几次 (2)每次查询两棵线段树相减,类似前缀和,得出当前区间内各个数出现的次数,再利用线段树的结构进行类似二分的查找即可 优化 对每个点都建树显然容易 memory limit exceeded 思考发现,一个点只会对上一个点的权值线段树中每一层的...
2020-01-18 17:30:30
117
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人