学习
baymax先生
最值得信任的人是自己,最值得珍惜的人是眼前人。
展开
-
数列分块入门练习题一
几个词语的相关解释:区间:数列中连续一段的元素;区间操作:将某个区间[a,b]的所有元素进行某种改动的操作块:我们将数列划分为若干个不相交区间,每个区间称为一个块;**整块**:在一个区间操作时,完整包含于区间的块**不完整的块**:在一个区间操作时,只有部分包含于区间的块,即区间左右端点所在的两个块分块入门 1传送门这是一道能用许多数据结构优化的经典题,可以用于不同数据结构训练。数列分块就是把数列中每m个元素打包起来,达到优化算法的目的。以此题为例,如果我们把每m个元素分成一块,共原创 2021-08-23 15:40:02 · 150 阅读 · 0 评论 -
Headmaster‘s Headache
Headmaster’s Headache传送门参考:算法竞赛入门经典(第二版)P286.本题做法很多,但是我是不会的,一种相对容易实现的做法是:用两个集合s1恰好表示有一个人教的科目的集合,s2表示至少有两个人教的科目集合,而d(i,s1,s2)表示己经考虑了前i个人的最少消费。注意,所有人一起从0开始编号,则编号0~m-1是在职教师,m到n+m-1是应聘者,状态转移方程d(i.s1.s2)=min{d(i+1,s1’,s2’)+c[i],d(i+1,s1,s2)},其中第一项表示聘用,第二项表示不原创 2021-08-23 10:43:12 · 143 阅读 · 0 评论 -
Corn Fields(状压Dp)
由数据我们可以清楚的知道,这道题是状压dp读入之后,我们用p[i]来表示第i行上的草地情况,f[i][j]表示前i行状态为j时的方案数。首先我们考虑实例;我们可以看到,在只考虑第一行的的时候,就有五种情况,0 0 0 0 1 0#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <vector>#include原创 2021-08-21 10:40:19 · 287 阅读 · 0 评论 -
互不侵犯king
这是我第一次接触状压dp,对于状压dp,我一开始天真以为仅仅是用二进制数表示状态,通过位运算解决问题。后来发现还真是,哈哈 。这道题已经像是一道模板题了,现在我们从微观角度,开始剖析他。题目大意:在一个n*n的图中选k个点,使得以每个点为中心的九宫格内有且只有他一个点。求方案数。题解:首先我们先理解状态压缩,就是把一种状态压缩成一个数,以节省空间,否则种类的多少,就是几维数组,一旦大小达到10的五次方,基本TLE就不远了。举个例子:一个位置1代表有国王,0代表没有国王,101001,就应该用一原创 2021-08-21 09:49:03 · 129 阅读 · 0 评论 -
初学动态规划
文章目录A - Mr. Young's Picture PermutationsA - Mr. Young’s Picture Permutations传送门#include <iostream>#include<algorithm>#include<cstring>#include<cstdlib>using namespace std;const int N=31;#define ll long longint main(){..原创 2021-08-16 14:37:50 · 90 阅读 · 0 评论 -
二叉搜索树,平衡树,double queue Version Controlled IDE Play with Chain Tyvj 1729 文艺平衡树 普通平衡树 平衡树·Splay
文章目录A - Double QueueB - Version Controlled IDEC - Play with ChainD - Tyvj 1729 文艺平衡树E - 普通平衡树F - 平衡树·SplayA - Double Queue#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<queue>#includ..原创 2021-08-13 11:14:39 · 116 阅读 · 0 评论 -
vector的使用
文章目录1、定义与初始化对象2、列表初始化3、创建制定数量的元素4、创建二维数组5、向vector中添加元素6、vector的基本操作7、使用迭代器8、例题标准库类型的vector表示对象的集合,其中,所有的对象都有相同类型;(就是动态数组,扯那多呢?)//必须包含的头文件:#include<vector>using namespace std;1、定义与初始化对象vector<string> s;//默认初始化,s中不包含任何元素;//事实上,最常见的方式是先..原创 2021-08-10 10:35:46 · 115 阅读 · 0 评论 -
2021-08-05初学线段树+扫描线(求矩形面积)
利用扫描法算矩形的面积:对竖边所在横坐标进行排序:10,15,20,25;入边:相应区间+1;出边:需要消除影响-1;入边第一条边:[10,20]+=1;S1=(15-10)*(20-15);入边第二条边:[15,25.5]+=1;可得[10,15]=1,[15,20]=2,[20,25.5]=1;s2=(25.5-10)乘(20-15);出边第三条边:[10,20]-=1;[15,25.5]=1;s3=(25.5-15)乘(25-20);出边第四条边 [15.25.5]-=1;.原创 2021-08-05 10:01:17 · 97 阅读 · 0 评论 -
acwing 高精度乘法(根据减法改编)
#include<iostream>#include<algorithm>#include<queue>#include<cstdio>using namespace std;bool cmp(vector<int >&a,vector<int >&b){ if(a.size()!=b.size()) return a.size()>b.size(); for(int .原创 2021-07-31 20:58:38 · 66 阅读 · 0 评论 -
H - Eight
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<unordered_map>//用于哈希操作#include<queue>#define x first#define y second#define outt cout<<t<<endl;#define debug cout&...原创 2021-07-28 09:04:47 · 135 阅读 · 0 评论 -
C++ STL之映射map的使⽤
C++ STL之映射map的使⽤map 是键值对,⽐如⼀个⼈名对应⼀个学号,就可以定义⼀个字符串 string 类型的⼈名为“键”,学号 int 类型为“值”,如 map< string, int> m; 当然键、值也可以是其它变量类型~ map 会⾃动将所有的键值对按照键从⼩到⼤排序, map 使⽤时的头⽂件 #include < map> 以下是 map 中常⽤的⽅法:#include <iostream>#include <map>#incl原创 2021-07-28 08:44:49 · 111 阅读 · 0 评论 -
string使用详解
文章目录1.准备2.初始化3.赋值4.访问5.连接6.比较7.子串8.交换9.查找10.替换11.插入12.删除13.特性描述14.字符串流处理acwing1.准备首先,需要做这样的事情#include #include using namespace std;//之后就可以体验string内置的各种强大功能了—string相关迭代器//返回string的起始位置const_iterator begin()const; iterator begin();//返回string的最后..原创 2021-07-28 08:41:23 · 198 阅读 · 0 评论 -
链式前向星+最短路的板子
/** * 关于优先队列怎么使用:https://www.acwing.com/blog/content/3417/ **/int h[N], e[M], w[M], ne[M], idx;int dist[N], st[N];//表示该是否已经确定//h头节点 e表边 w表示边权值 ne 表示下一条与起点连接的边的编号 idx 表示边的数量以及最新插入的边的编号typedef pair<int, int> PII;//记录节点的编号以及到节点的距离void add(int原创 2021-07-28 08:29:30 · 81 阅读 · 0 评论 -
acm模板1
文章目录扩展域并查集*带权并查集例题poj1163最大子段和矩阵连乘滑雪最长上升子序列最长公共子序列扩展域并查集/** * 扩展域并查集 * 例题链接:https://www.luogu.com.cn/problem/P2024 **/ #include <iostream> #include <algorithm> #include <cstring>using namespace std;#define endl "\n"const i..原创 2021-07-28 08:27:39 · 87 阅读 · 0 评论 -
poj1315 Don‘t Get Rooked (dfs加回溯)
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;char da[108][108]; int hs[108][108];int ans;//全局变量记录放车数量的最大值。int dx[4]={0,0,1,-1};int dy[4]={1,-1,0,0};int n;void update(int ..原创 2021-07-28 08:10:00 · 87 阅读 · 0 评论 -
小白都要会的基本操作
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录最大公约数与最小公倍数快速乘与快速幂二分查找素数打表常规思路:埃氏筛法欧拉筛法前缀和与差分(1)前缀和差分搜索最大公约数与最小公倍数int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b);}利用STL中的函数#include<stdio.h>#include<algorithm>using n原创 2021-07-27 20:19:38 · 107 阅读 · 0 评论 -
自己复习用-----并查集
有一道经典的题目,就是下面这个问题。不多说了,直接开始。find函数找根节点基本有这两种方法:第一种递归:int find(int x){ return x == pre[x] ? x : find(pre[x]);}第二种:int find(int x){ int root, temp; root = x; while(root != pre[root]) root = pre[root]; while(x != root) { temp = pre[x]; p原创 2021-07-27 11:21:18 · 113 阅读 · 0 评论 -
简单的会议安排问题
简洁来说,会议安排指的是在有限的时间内召开更多会议(两个会议不能同时进行)。会议安排问题本质就是贪心算法的使用。下面进入正题:会议时间表会议i12345678910开始时间bi31525386812结束时间ei64759811101214问题目标:求在14时间内最多的会议个数。做本题的策略就是找到最早开始的时间+持续时间最短的时间的会议。其实就是找到 最早结束时间的会议 。即对结束时间进行排序(由小到大),如果原创 2021-07-25 21:55:22 · 820 阅读 · 0 评论 -
sort排序的基础使用
首先,sort 排序函数是在c++语言来使用的,使用此函数我们需要引用头文件:#include<algorithm>语法描述为:sort(begin,end);不过使用的话一般是sort(begin,begin+n); 或sort(begin,begin+n,cmp);n代表着需要排序的数目;cmp代表着排序方式,不跟数组数据有关系,这里先不做解释,可以不写cmp,如:sort(begin,end)先尝试一下,注意观察排序顺序;begin,end分别代表首地址和尾地址,例如对s[12原创 2021-07-25 20:20:38 · 307 阅读 · 0 评论 -
纪念自己的第一次博客
致自己学习算法的开始今天是我第一次写博客,心里非常高兴并打算用心做好以后的每一篇博客,虽然每篇博客可能并不符合规范,写的并不简洁,但是我会用自己的大白话,以我自己的方式,记下学习算法的瞬间,希望我自己能坚持下来,我也坚信自己一定能够坚持下来,这不仅仅是一个任务,这更像是一次旅程,将自己全身心投入其中,感受语言的美好,探索深处的秘密。在我成功将不会的算法搞懂的时候,我会有一种满足感,自豪感。我喜欢这种感觉,这种超脱一切的感觉,更是一种精神食粮,激发着自己的潜力。最后,希望自己能够在算法的道路上,越走越深,原创 2021-07-25 18:38:44 · 85 阅读 · 0 评论