自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 Day16(dp进阶)

构成动态规划算法的三要素:①状态 ②阶段 ③决策动态规划求解的三个基本条件:①子问题重叠性 ②无后效性 ③最优子结构LIS(最长上升子序列)状态表示:F[i]表示a[i]为结尾的“最长上升子序列”长度阶段划分:子序列的结尾位置转移方程:F[i] = max(F[j] + 1)边界:F[0] = 0LCS(最长公共子序列)状态表示:F[i][j]表示前缀子串A[1i],B[1j]的“最长公共子序列”长度阶段划分:已经处理的前缀长度转移方程:F[i][j] =max(F[i-1

2021-02-23 11:47:58 93 1

原创 Day15(计算几何)

基础部分高精度圆周率const double pi = acos(-1.0);偏差值const double eps = 1e-8;sgnint sgn(double x) { // 判断x是否等于0 if (fabs(x) < eps) return 0; else return x < 0 ? -1 : 1;}dcmpint dcmp(double x, double y) { // 比较两个浮点数,0为相等,-1为小于,1为大于

2021-02-21 21:30:49 129

原创 Day14(博弈论入门)

博弈论,即公平组合游戏,满足下列一些特征:一场游戏有两个玩家,两个玩家轮流行动,是经典的回合制游戏。两个玩家的移动按照规则移动,并且两玩家之间的移动不区分身份。两个玩家按照最优的决策行动,即给定一个局势,能够一开始就区分出先手必胜还是先手必败。巴什博奕Brave Game十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫《勇敢者的游戏》(英文名称:Zathura),一直到现在,我依然对于电影中的部分电脑特技印象深刻。今天,大家选择上机考试,就是一种勇敢(brave

2021-02-20 21:14:21 151

原创 Day13(LCA入门)

LCALCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先。在这里,一个节点也可以是它自己的祖先。以下为一棵由双向边构成的无根树。双向边具有两个方向,不能确定父子关系。所以我们选择一个点作为根节点,将其“拉”成有根树。如图所示对于点4,有祖先点2,点1对于点5,有祖先点2,点1而他们的最近公共祖先就为2同理,点4,点3的最近公共祖先为1 点4,点2的最近公共祖先为2方式1.存边1 22 52 62 41 3

2021-02-04 20:50:57 106

原创 Day12(数论基础)

数论基础常用运算符∑abc\sum_{a}^bc∑ab​c:求和运算,读作sigma,一般的形式为∑abc\sum_{a}^bc∑ab​c。其中a,b是两个表达式,分别表示开始条件和结束条件,c表示求和的式子,整个式子表示将所有符合条件的c求和。∏abc\prod_{a}^bc∏ab​c:求积运算,读作pi,和∑\sum∑使用方法相同,但是表示的是表达式之积。[a]:其中a是一个表达式,当a不成立的时候,整个中括号的值为0,否则为1。x|y:整除符号,表示x是y的因子,也就是y%x=0。x mo

2021-02-04 00:05:22 264

原创 Day11(背包入门)

01背包w[i]—物品的重量v[i]—物品的价值dp[i][j]–前i个物品装入容量为j的背包里面能获得的最大价值dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i])例题-湫湫系列故事——减肥记I  对于吃货来说,过年最幸福的事就是吃了,没有之一!  但是对于女生来说,卡路里(热量)是天敌啊!  资深美女湫湫深谙“胖来如山倒,胖去如抽丝”的道理,所以她希望你能帮忙制定一个食谱,能使她吃得开心的同时,不会制造太多的天敌。当然,为了方便你制作食谱,湫湫给了

2021-02-02 21:52:47 87

原创 Day10(最小生成树)

最小生成树①是一棵树无回路n个顶点一定有n-1条边②是生成树包含全部顶点n-1条边都在图里③边的权重和最小定义给定一张边带权的无向联通图G = (V,E), n = |V|,m=|E|。由V中全部顶点和E中n-1条边构成的无向联通子图被称为G的一棵生成树。边的权值之和最小的的生成树被称为无向图G的最小生成树(Minimum Spanning Tree,MST)。Kruskal算法其基本思想是:假设连通网G=(V,E),令最小生成树的初始状态为只有N个顶点而无边的非连通图T=(V,{})

2021-01-31 21:16:49 161

原创 Day9(最短路)

最短路入门最短路相关概念——路径途径/链:一个点和边的交错序列,其中首尾是点——v0,e1,v1,e2,v2,…,ek,vk,有时简写为v0→v1→v2→…→vk。其中ei的两个端点分别为vi-1和vi。通常来说,边的数量k被称作这条途径的长度(如果边是带权的,长度通常指路径上的边权之和,题目中也可能另有定义)。(以下设w=[v0,e1,v1,e2,v2,…,ek,vk]。)迹:对于一条途径w,若e1,e2,…,ek两两互不相同,则称w一条迹。路径(又称简单路径):对于一条迹w,除了v0和vk允许

2021-01-30 20:27:53 65

原创 Day8(Hash)

Hash—哈希算法Hash其实是一种散列技术,散列技术是指在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每一个关键字都对应一个存储位置。即:存储位置=f(关键字)。这样,在查找的过程中,只需要通过这个对应关系f 找到给定值key的映射f(key)。只要集合中存在关键字和key相等的记录,则必在存储位置f(key)处。我们把这种对应关系f 称为散列函数或哈希函数。哈希冲突在理想的情况下,每一个 关键字,通过哈希函数计算出来的地址都是不一样的。但是在实际情况中,我们常常会碰到两个关键字key

2021-01-29 19:51:44 70 1

原创 Day7(dp)

dp—动态规划算法dp解题的一般思路①将原问题分解为子问题把原问题分解为若干个子问题,子问题和原问题形式相同或类似,只不过规模变小了。子问题都解决,原问题即解决。子问题的解一旦求出就会被保存,所以每个子问题只需求解一次。②确定状态在用动态规划解题时,我们往往将和子问题相关的各个变量的一组取值,称之为一个“状态”。一个“状态”对应于一个或多个子问题,所谓某个“状态”下的“值”,就是这个“状态”所对应的子问题的解。③确定一些初始状态(边界状态)的值以“数字三角形”为例,初始状态就是底边数字,值就是

2021-01-27 19:29:05 108 1

原创 Day6(贪心算法)

贪心算法:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。算法思路:①建立数学模型来描述问题②把求解的问题分成若干个子问题③对每个子问题求解,得到子问题的局部最优解④把子问题的解局部最优解合成原来解问题的一个解例题:“今年暑假不AC?”“是的。”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*%…”确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电

2021-01-26 19:09:47 102

原创 Day5(线段树)

线段树:1.线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。2.使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。3.使用时一般开4N的数组以免越界。4.区间修改不能将L到R区间都进行一次单点修改,这样每次修改的复杂度为O(nlogn),是会超时的,需要使用(差分+单点修改)或者(线段树延迟标记)。线段树的建立:void build_tree(int arr[],int tree[],int no

2021-01-25 20:59:37 52

原创 Day4(搜索)

图:一、图的类别:有向图与无向图二、图的概念:图由点和线组成,点之间的线,分有方向和无方向。三、创建图,就是创建出节点和节点之间的线。建边:#include<bits/stdc++.h>using namespace std;#define LL long longconst int N=100000+10;const int M=100+10;vector<int>G[N];//x->yvoid way1(){ G[x].push_back(y

2021-01-23 20:26:12 87

原创 Day3(二分查找)

二分查找算法:时间复杂度:O(log2n)条件:对象是数组且是有序数组基本思想:取中间位作为比较对象,若给定值与中间位的值相等,则查找成功;若给定值小于中间位的值,则在中间位的左半区继续查找;否则,在右半区查找。不断重复,直到查找成功或查找失败为止。常用二分查找代码:bool check(int x){ int l=0,r=n-1; while(l<r) { int mid=l+r>>1; if(a[mid]==x) return 1; else if(a[mi

2021-01-22 19:31:46 77

原创 Day2(并查集)

并查集算法:并查集主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作:合并(Union):把两个不相交的集合合并为一个集合。查询(Find):查询两个元素是否在同一个集合中。1.初始化const int N = 5e4 + 10 ;int fa[N];......for(int i=0;i<n;i++) fa[i]=i;2.查询int find(int x){ return x==fa[x]?fa[x]:fa[x]=find(fa[x]);}3.合

2021-01-21 18:51:21 53

原创 Day1(STL)

C++基础知识1.绝大部分情况下用C++(效率高、code速度快),少数情况用Java(有大数)、Python(兼容度不高)2.输入输出:cin cout3.万能头文件 #include<bits/stdc++.h>4.数组尽量放全局5.数组尽量开大6.常见算法的复杂度O(n) O(n^2) O(nlogn) O(2^n)STL:1.string(动态长度字符串)构造函数 string s1=“1234”迭代器:string::iterator it=s1.begin()

2021-01-20 22:35:24 127

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除