自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Microsoft Edge

Microsoft Edge是一款现代化的浏览器,它拥有众多功能和强大的性能,为用户带来更加流畅的浏览体验。Edge最近推出了分屏功能,支持一个窗口同时显示两个选项卡,这可以大大提高生产力和多任务处理能力。欢迎大家使用分屏及其他新功能后分享自己的使用心得与建议。

2023-05-08 11:18:57 269

原创 瑞文戴尔

展开。

2022-12-17 20:54:12 502 2

原创 差分约束

差分约束(Difference-Constraints),即给出对 nn 个未知数,mm 组形如 x_{c_k}-x_{c'_k}\leq y_kxck​​−xck′​​≤yk​ 的约束不等式,形如的不等式组,其中,y_kyk​ 是常数(可以是非负数,也可以是负数)。我们要解决的问题是:求一组解 x_1=a_1,x_2=a_2,...,x_n=a_nx1​=a1​,x2​=a2​,...,xn​=an​,使得所有的约束条件得到满足,否则判断出无解。

2022-12-16 20:54:59 626 1

原创 BellmanFord算法与SPFA算法

​​​​​​。

2022-12-16 20:51:53 446 1

原创 考场策略

​​​​考试的目的: 得分- 稳定心态,减少失误- 考场目标:将自己能力范围内的分全部拿到- 会做的都做对- 不会做的都蒙对为什么要花足够多的时间去读题和构思?努力VS选择花半个小时写代码,发现思路错了,慌乱之中,又花了半个小时重新写新的代码VS花了二十分钟读题,确定思路后,花了二十分钟写好代码定义:对于难题和不保证能做对的题,在减少失误的情况下,增加得分面对出题人的一场稳赚不赔的赌博动规题和图论题不会做?拿部分分:搜索+剪枝、搜索+记忆化Copy暴力拿不到满分,写的正解不敢保证一定

2022-12-16 20:46:48 442 1

原创 基础动态规划总结

定义 f[i][j]f[i][j] 来表示将前 ii 件物品放入容量为 jj 的背包中时,所能获得的最大价值。容易得到,目标状态(我们最终要求的答案)就是 f[n][C]f[n][C]。

2022-12-16 20:43:45 408 1

原创 常用代码模板3——基础数据结构

int sum;......};Copy。

2022-12-16 20:39:35 341 1

原创 常用代码模板2——基础算法

暴力枚举->枚举+优化->正解备注:\log nlogn 主要出现在二分、分治和树、图中。

2022-12-16 20:38:00 461 1

原创 常用代码模板1——基础语法

如果一个函数不是 void 类型,一定要保证在任何情况下都有返回值,否则可能爆零(尤其是dfs中)!!!{......}Copy如果一个函数不是 void 类型,一定要保证在任何情况下都有返回值,否则可能爆零(尤其是dfs中)!!!{......}Copy如果一个函数不是 void 类型,一定要保证在任何情况下都有返回值,否则可能爆零(尤其是dfs中)!!!...

2022-08-04 09:44:02 356 1

原创 Tarjan 求有向图的强连通分量

Tarjan 算法是基于对图进行深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树。搜索时,把当前搜索树中未处理的节点加入一个栈,回溯时可以判断栈顶到栈中的节点是否构成一个强连通分量。...

2022-08-04 09:40:20 563 1

原创 Prim算法

Prim算法

2022-07-28 16:59:22 1247 1

原创 Kruskal算法

Kruskal算法

2022-07-28 16:57:42 1116 1

原创 Floyd 算法

Floyd

2022-07-28 16:54:42 177 1

原创 Dijkstra 算法

求最短路算法

2022-07-28 16:52:58 352 1

原创 十大排序算法比较

排序算法

2022-07-28 16:50:35 1641 1

原创 队列与栈

前置知识:数组+模拟为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!知识总览队列是一种模拟现实生活中排队过程的线性数据结构,具有先入先出的特点 队列支持入队、出队、求队列长度、判空等操作,不支持遍历操作 队列的基础实现有两种,STL queue 和数组模拟队列,各有优缺点q.size()q.empty()q.front() / q.back()q.pop()q.push(element)STLqueue数组模拟:一个数组 + 两个指针求大小...

2022-05-28 17:08:23 268 14

原创 二叉排序树与 set、map

前置知识:二叉树的概念及性质为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!学习目标理解二叉排序树的概念 理解二叉排序树的查找、插入、删除、构建和简单平衡的过程 掌握 STL 的容器map、set的使用方法及其用途二叉排序树的概念二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree)、二叉搜索树,是指一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值。 若它的右子...

2022-05-28 17:06:25 220 1

原创 求解斐波那契数列的若干方法

问题描述首先定义斐波那契数列问题:定义a_0=1a0​=1,a_1=1a1​=1,a_n=a_{n−1}+a_{n−2}an​=an−1​+an−2​,求a_nan​是多少。为了避免考虑整数溢出问题,我们求a_n%pan​的值,p=10^9+7p=109+7。算法1——递归递归计算的节点个数是O(2^n)O(2n)的级别的,存在大量重复计算。时间复杂度是O(2^n)O(2n),一秒内大约能算到第三四十项。C++ 代码const int MOD = 10...

2022-03-26 16:35:17 1036 1

原创 图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)

图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)阅读本文前,请确保你已经掌握了递归、栈和队列的基本知识,如想掌握搜索的代码实现,请确保你能够用代码实现栈和队列的基本操作。深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search,简称 BFS)是图论中两种非常重要的算法,也是进行更高的算法阶段学习的最后一道门槛。搜索算法频繁出现在算法竞赛题中,尤其是深度优先搜索,在竞赛中,它是用来进行保底拿分的神器!本文将..

2022-03-26 16:33:13 3832 1

原创 二叉排序树与 set、map

前置知识:二叉树的概念及性质为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!学习目标理解二叉排序树的概念 理解二叉排序树的查找、插入、删除、构建和简单平衡的过程 掌握 STL 的容器map、set的使用方法及其用途二叉排序树的概念二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree)、二叉搜索树,是指一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值。 若它的右...

2022-03-26 16:27:04 1482 1

原创 动态数组-vector

vectorstd::vector是 STL 提供的内存连续的、可变长度的数组(亦称列表)数据结构。能够提供线性复杂度的插入和删除,以及常数复杂度的随机访问。和普通数组对比问题 普通数组 vector数组 定义数组 int a[N];int a[N] = {0}; // 全初始为 0 vector<int> a;vector<int> a(N); <br>vector<int> a(N, 1);// 全赋值为...

2022-02-19 17:37:26 254 1

原创 第三十三章:图的基本概念与性质

前置知识:树的基本概念及性质为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!如果在阅读中遇到困难,也可以回到前面章节查阅。学习目标掌握图的基本概念 掌握图的一些性质图的概念基本概念图 (Graph)是一个二元组G=(V(G), E(G))G=(V(G),E(G))。其中V(G)V(G)是非空集,称为点集 (Vertex set),对于VV中的每个元素,我们称其为顶点 (Vertex)或节点 (Node),简称点;E(G)E(G)为...

2022-02-19 17:30:56 2461 1

原创 第三十二章:二叉树的存储与遍历

前置知识:二叉树的概念与性质为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!学习目标 熟练掌握二叉树的存储方式 理解二叉树的三种遍历方式的实现过程 给出一棵二叉树,能够写出对应的三种遍历序列,给出任意两种遍历序列,能够推导并还原出二叉树并写出另外一种遍历序列 掌握三种遍历方式的代码实现,掌握给出两种遍历方式的序列,求第三种遍历序列的代码实现 二叉树的存储二叉树的存储和普通树基本一致。只是由于二叉树中的结点最多只有两个子节点,所以在存储子..

2022-02-19 17:29:19 139 1

原创 第三十一章:二叉树的概念与性质

前置知识:树的概念与性质为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!每个结点最多只有两个子结点的有根树称为二叉树。常常对两个子结点的顺序加以区分,分别称之为左子结点和右子结点。大多数情况下,二叉树一词均指有根二叉树。二叉树的性质比较丰富,本章节将介绍二叉树的性质。请熟记这些性质。学习目标熟练掌握二叉树的概念和各种性质 能够综合利用二叉树的各种性质解决一些二叉树中的问题二叉树的概念定义简单地理解,满足以下两个条件的树就是二叉树:树中包含的各个...

2022-02-19 17:28:04 256 1

原创 第三十章:普通树的存储和遍历

前置知识:树的概念、向量(vector)为了保证学习效果,请保证已经掌握前置知识之后,再来学习本章节!学习目标了解树的几种存储方法的思想、实现方式和各自的优缺点 掌握树的存储方法的代码实现 掌握树的两种遍历方式:先根遍历(DFS)和层次遍历方式(BFS)引入显然树的定义是递归的,是一种递归的数据结构。树作为一种逻辑结构,同时也是一种分层结构,具有以下两个特点:1)树的根结点没有前驱结点,除根结点之外的所有结点有且只有一个前驱结点。2)树中所有结点可以有零个或多个...

2022-02-15 18:21:36 861 1

原创 第二十九章:树的基本概念和性质

之前学习了数组、字符串、队列、栈等等数据类型和数据结构,它们都是线性存储结构。本章要学习的树结构是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合。树结构不论是在竞赛中,还是在实际的工程开发中,都是一类重要的非线性数据结构,树中的节点之间具有明确的层次关系,并且每个节点会“分支”出若干个其他节点。数据结构中的树和现实生活中的树长得一样,只不过我们习惯于处理问题的时候把树根放到上方来考虑。这种数据结构看起来像是一个倒挂的树,因此得名。后面我们提到的树均指数据结构中的树。数据结构.

2022-02-15 18:19:17 5493 1

原创 第二十八章:解题技巧

哨兵设置“哨兵”,哨兵就是待查值,将它放在查找方向的“尽头”处,免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高查找速度。例1(提高效率)假设一个乱序数组,需要查找一个元素是否在该数组中,这时需要用到顺序查找,也就是遍历数组。一般情况下我们会写下如下代码://函数返回在a数组中查找到元素key的下标,若没有找到返回0int Search(int a[],int n,int key){ //假设我们的数组都是从1下标开始存的 int i; f.

2022-02-15 18:18:02 203 1

原创 第二十七章:时间复杂度与优化

阅读本文前,请确保已经学会C++的基本知识,包括:三大结构(顺序、分支、循环)、数组、字符串等相关知识。部分题目可能要求掌握相应的基础算法。一、小灰与大黄的故事二、怎么衡量代码的好坏让我们来想象一个场景:某一天,小灰和大黄同时加入了一个公司......一天过后,小灰和大黄各自交付了代码,两端代码实现的功能都差不多。大黄的代码运行一次要花0.1秒,内存占用5MB。小灰的代码运行一次要花100秒,内存占用500MB。于是......由此可见,衡量...

2022-02-15 18:16:28 1583 1

原创 第二十六章:二维数组

二维数组​问题描述:给定一个N行M列的矩阵,将其逆序输出(行和列都倒着输出)。样例:输入数据#1 3 4 1 2 3 4 4 5 6 7 5 6 7 8Copy输出数据#1 8 7 6 5 7 6 5 4 4 3 2 1Copy算法思路:定义N个一维数组,每个数组存储一行,然后倒着讲这些一维数组逆序输出。问题:如何定义N个大小为M的一维数组?在程序中又将如何访问?一、二维数组的定义当一维数组元素的类型也是一维数组时,便构成了..

2022-02-15 18:14:30 2711 2

原创 第二十五章:一文掌握while循环

while循环一、引入背景  利用for语句编写程序时,大多数需要提前知道循环次数,如果遇到无法确定循环次数的问题就不好用了。当型循环语句(while循环)提供了解决这类问题的方法。二、while循环的一般格式while(循环条件表达式){ 循环语句组;}Copy对应运行流程图:while循环语句的执行过程是:先求条件表达式的值,当值为真时,执行循环体;然后再次回到条件表达式,如果仍为真,继续执行循环体。反复操作上述两步,直到条件表达式的值为假时,跳出whi.

2022-02-15 18:12:25 4544 1

原创 第二十四章:结构体与排序

结构体与排序学习结构体与排序之前,请确保你已掌握一维数组和函数的相关知识。一、为什么要使用结构体回顾前面的知识,我们都知道,数组可以用来批量定义和操控具有相同数据类型的变量。比如,int a[10]这条语句中,a数组可以存储10个int 类型的变量。但是如果需要批量定义的变量数据类型不同呢?比如:要同时统计一个班上所有学生的信息,包括姓名(string),年龄(int),身高(float),等等。这个时候,如果还用数组来存储信息的话,我们需要至少3个数组,处理起来很不方便,这时就要.

2022-02-15 18:10:17 388 1

原创 第二十三章:一文掌握函数

1.函数的认识与定义一、什么是封装?​在我们的生活中,有很多事情要去处理,但并不是每件事情都需要我们去亲力亲为。比如,在我们想要吃饭时,爸爸妈妈会帮忙准备好热腾腾的饭菜,而每道菜肴具体是怎样制作的我们本身并不关心;在我们想要冷藏一瓶饮料的时候,只需要将饮料放入冰箱即可,至于冰箱是怎样冷藏饮料的我们并不关心;在我们想要使用计算器的时候,只需要将需要运算的数字输入进去,计算器就会自动计算出对应的结果,至于计算器是怎样运作的我们并不关心......我们可以将常用的功能(如爸爸妈妈是怎样制作饭菜的,

2022-02-15 18:04:23 319 1

原创 第二十二章:求解素数的N种方法

求解素数的N种方法一、质数和合数质数:质数又称**素数**。指在一个大于 1的自然数中,除了 1和此整数自身外,不能被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为质数。最小的素数是 2, 它也是唯一的**偶素数**。从小到大的素数依次排列为∶ 2,3,5,7,11,13,17……合数:比 1大但不是素数的数称为合数(0 和1 既非素数也非合数)最小的合数是 4。从小到大的合数依次排列为∶4,6,8,9,10,12,14……特别注意:判断质.

2022-02-15 17:57:56 3608 2

原创 第二十一章:字符串函数进阶

字符串进阶-字符串函数应用c++提供了大量的字符串函数,供我们在解题时使用。一、常用函数介绍1-长度 (有返回值)a.size() 或 a.length()Copy2-查找(有返回值)a.find("hello") //返回子串hello在a中第一次出现时开头字母h的下标 a.find('h') //返回字符h在a中第一次出现时的下标 a.find(b) //返回b在a中第一次出现时的相关下标信息(b可以是字符或字符串)a.find('.

2022-02-15 17:56:34 391 1

原创 第二十章:字符串入门

字符串入门一、知识引入  对于一个或多个字符构成的序列,除了用字符数组存储以外,还可以用C++ string类来进行字符串的处理。  要使用string 类,必须在程序中包含头文件cstring。string类的定义隐藏了字符串的数组性质,让我们能够像处理普通变量那样处理字符串。  使用string类型串具有一些独特的优势。 首先, 它在内存使用上是自动的, 需要多少, 开辟多少, 并且能够根据字符串大小的变化自动调整所开辟的内存,无需考虑越界的情况; 此外, string类附带了功能.

2022-02-14 16:52:48 645 1

原创 第十九章:二分查找和二分答案

二分查找二分的思想在程序设计中有着广泛的应用,例如,排序算法中的快速排序、归并排序,数据结构中的二叉树、堆、线段树等。二分是一种常用且高效的算法,它的基本用途是在单调序列中进行查找和判定操作。二分查找算法思想对于n个有序且没有重复的元素(假设为升序),从中查找特定的某个元素x,我们可以将有序序列分成规模大致相等的两部分,然后取中间元素与要查找的元素x进行比较,如果x等于中间元素,则查找成功,算法终止;如果x小于中间元素,则在序列的前半部分继续查找,否则在序列的后半部分继续查找。这样就可以将查找的

2022-02-14 16:49:55 816 1

原创 第十八章:一文掌握数组标记

数组标记一.桶标记1.认识数组数组是一种将数据有序存放的结构,通过一维数组的学习,相信同学们会感觉数组的使用是非常灵活的,原因无异于是因为数组里一个下标对应一个元素。例如 int a[5]={2,3,5,7,11},下标0对应的元素为a[0],下标1对应元素a[1]...,那么在将数组应用在生活或者学习场景中时,下标及其对应的元素就会有不同的含义。2.桶标记引入背景:这里有一个有趣的问题:从键盘输入5 个0-9 的数,然后输出0-9 中哪些没有出现过的数。例如,输入2 5 2 1 8 .

2022-02-14 16:48:29 2407 2

原创 第十七章:线性动态规划

通过上一章对01背包问题的学习,我相信同学们都动态规划都有了一个新的认识。在我们利用动态规划解决问题的过程通常会有以下几个常见的专业术语,分别是:状态定义,状态的转移,初始化和边界条件。下面我们对这几个专业术语做一个简单的介绍。状态定义就是定义子问题,如何表示目标规模的问题和更小规模的问题。例如常见的方法:定义状态 dp[n],表示规模为 n 的问题的解,dp[n - 1] 就表示规模为 n - 1 的子问题的解。在实战中 dp[n] 的具体含义需要首先整理清楚再往下做。状态转移就是子问题之间...

2022-02-14 16:46:39 1880 3

原创 第十六章:动态规划入门

动态规划入门什么是动态规划,我相信大多数同学都听过关于他的传说,但是都未真正的见识到他的庐山真面目。动态规划一直是算法竞赛中的重中之重,也是非常难的一类问题。无论是小学竞赛还是后面初高中和大学算法竞赛,都会时常见到他的身影。动态规划作为一类非常复杂的算法问题,因此现阶段,我们只需要对动态规划做一个初步的了解即可,随着我们后面的学习和知识的不断积累,还会继续深入的学习动态规划的其他知识点,所以同学们在学习本章节时也不要有太大的负担。好消息是,最近几年,合肥市信息学竞赛都未涉及动态规划类型的题目。.

2022-02-14 16:44:48 408 1

原创 第十五章:贪心进阶

贪心进阶带期限和惩罚的任务调度问题1. 补作业小李刚刚参加完信息学竞赛,现在,他有很多作业要做。 每个老师都给了他交作业的最后期限。 如果小李在截止日期之后交作业,老师就会降低他最终考试的分数。 现在,我们假设每科作业都需要做一整天。 小李希望你帮助他安排家庭作业的顺序,以最大程度地减少分数的降低。输入格式:第1行:一个正整数N(1<=N<=1000),表示作业的数量。第2行:N个空格分隔的整数,第i个整数d_i,表示第i个作业的截止日期为d_i(1<= d_i &

2022-02-14 16:43:03 1114 1

空空如也

空空如也

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

TA关注的人

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