随笔分类 - 算法
包括了学习过程中的所有算法
摘要:
一、河大机试 1.求一个数的反序数 int reverseX(int x){ int res = 0; // 求X的反序数 while(x > 0){ res = res*10 + x % 10; x /= 10; } return res; } 2.pair的使用 #include<iostrea
阅读全文
一、河大机试 1.求一个数的反序数 int reverseX(int x){ int res = 0; // 求X的反序数 while(x > 0){ res = res*10 + x % 10; x /= 10; } return res; } 2.pair的使用 #include<iostrea
阅读全文
摘要:输入样例 4 1 3 5 2 输出样例 22 (区间 dp) 集合表示最后一次合并选区间中的哪个点作为分界点 状态转义方程 f[l][r] = min(f[l][r], f[l][k] + f[k+1][r] + s[r] - s[l - 1]) #include<iostream> #includ
阅读全文
摘要:贪心 耍杂技的牛 国王游戏同款思路 大部分贪心用的都是已经被证明过的知名的数学模型 贪心得到的答案 >= 最优解 贪心得到答案 <= 最优解 #include<iostream> #include<algorithm> using namespace std; // 给 pair<int, int>
阅读全文
摘要:贪心区间覆盖 算法分析 #include<iostream> #include<algorithm> using namespace std; const int N = 100010; int n; struct Range { int l, r; bool operator< (const Ra
阅读全文
摘要:贪心区间分组 #include<iostream> #include<algorithm> #include<queue> using namespace std; const int N = 100010; int n; struct Range{ int l, r; bool operator<
阅读全文
摘要:c++ 结构体重载 因为此前对结构体不是很了解,这里特别地记录学习 结构体的心得体会 在以后的学习过程中所遇到的有关结构体的知识都会更新到这里 struct Range{ int l, r; bool operator< (const Range &W)const{ return r < W.r;
阅读全文
摘要:贪心 看了很多证明,感觉不是很透彻,根据我自己的理解写了这篇题解 ans 表示最优解 cnt 表示所有解中的一个 现在需要证明以下不等式 1) ans <= cnt 2) ans >= cnt 1) 的证明 因为 ans 是所有的解中的最优解(也就是最小的解) 而 cnt 是所有解的区间中的一个解
阅读全文
摘要:能被8整除,等价于后三位可以被8整除 能被2整除,等价于后1位可以被2整除 能被4整除,等价于后两位能被 4 整除 能被 3 或 9整除,等价于各位数字之和能被 3 或 9 整除 能被 11 整除, 等价于奇数位各位数字之和减去偶数位各位数字之和的差值能被11整除 能被 7 或 11 或 13 整除
阅读全文
摘要:完全背包问题 思路: f[i][j] = f[i-1][j - k*v[i]] + k * w[i] 朴素版的做法 #include<iostream> #include<algorithm> using namespace std; const int N = 1010; int n, m; in
阅读全文
摘要:话不多说,先看图 1.1 朴素版的Dijkstra算法 一般用到这个情况稠密图,也就是节点的个数比边的个数少。 (稠密图用邻接矩阵存储) #include<cstring> #include<iostream> #include<algorithm> using namespace std; con
阅读全文
摘要:# c++ 中常用的 STL #### vector ```c++ //vector 变长数组 倍增的思想(倍增:系统为每一个程序分配空间的时候,所需要的时间和空间大小无关,与请求次数相关)尽量减少请求的次数 /* 返回元素的个数 size() 判断是否为空 empty() 清空 clear() f
阅读全文
摘要:
# 位运算 **lowbit(x):返回x二进制的最后一位1** ```c++ lowbit的具体实现代码 x&-x; //(-x=(~x)+1) -x等于取反x加1; x = 1010; lowbit(x) = 10; x = 101000; lowbit(x) = 1000; ``` 可以用于求
阅读全文
# 位运算 **lowbit(x):返回x二进制的最后一位1** ```c++ lowbit的具体实现代码 x&-x; //(-x=(~x)+1) -x等于取反x加1; x = 1010; lowbit(x) = 10; x = 101000; lowbit(x) = 1000; ``` 可以用于求
阅读全文
摘要:# 双指针算法 ```c++ for(int i=0, j=0; i using namespace std; const int N = 100010; int a[N], s[N];//s数组用来判断 j ~ i 之间有没有重复的 int main(){ int n; cin>>n; for(i
阅读全文

浙公网安备 33010602011771号