自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++语言篇 第四章 循环结构

第一节 for语句 (计数循环)(一)格式:注意:分号的位置(二)语句格式举例:(1)将控制变量从1变到100,增量为 1 for(i=1;i<=100;++i) (2)将控制变量从100变到1,增量为 -1 for(i=100;i>=1;--i) (3)控制变量从7变到77, 增量为 7 for(i=7;i<=77;i+=7)(4)for(int i=20; i>=2;i-=2) ...

2020-07-04 10:12:41 1197

原创 C++语言篇 第三章 选择结构

第一节 if选择结构一、if语句(单分支结构) 格式1: if (条件表达式) 语句1; 功能:如果条件表达式的值为真,即条件成立,语句1将被执行。否则,语句1将被忽略(不被执行),程序将按顺序从整个选择结构之后的下一条语句继续执行。说明:格式中的“条件表达式”必须用圆括号括起来。执行流程如下图所示 :...

2020-04-08 11:27:30 682

原创 C++语言篇 第二章 顺序结构

第一节 认识第一个C++程序1、准备工作:1、软件安装:2、中文设置、放大编辑器的字体按住Ctrl键,滚动鼠标滚轴。3、启动 Dev C++,点击桌面上的图标4、新建源程序选择“文件”—>“新建”—>“源代码”,新建一个源程序文件, 输入如下内容。#include<bits/stdc++.h>using names...

2020-01-11 22:51:34 909

原创 C++语言篇 第一章 二进制及计算机基础

一、计算机语言发展简介计算机语言分为:机器语言、汇编语言、高级语言。机器语言:(二进制语言)是用二进制代码表示的计算机语言。能直接识别和执行的一种机器指令的集合。不同机器的机器语言不同。机器语言具有灵活、直接执行和速度快等特点。 (如: 10100010010111100011代表的是A=B+C)汇编语言:(符号语言),汇编语言中用符号代替机器语言中难以记忆的二进制码。不同的计算机的汇...

2020-01-11 22:06:38 986

原创 STL详解(九) 映射容器map

一、map简介 1、 什么是Map Map是STL的一个关联容器,翻译为映射,数组也是一种映射。如:int a[10] 是int 到 int的映射,而a[5]=25,是把5映射到25。数组总是将int类型映射到其他类型。这带来一个问题,有时候希望把string映射成一个int ,数组就不方便了,这时就可以使用map。map可以将任何基本类型(包括STL容器)...

2019-07-14 18:16:03 263

原创 STL详解(四) 优先对列容器priority queue

一、优先队列priority_queue简介 priority_queue(优先队列)允许用户为队列中元素设置优先级,放置元素的时候不是直接放到队尾,而是放置到比它优先级低的元素前面。priority_queue有三个模板参数:priority_queue<Type,  Container,  Functional>,其中后两个可以省略。Type :为数据类型...

2019-06-22 07:23:14 253

原创 STL详解(三) 队列容器queue

一、queue(队列)简介:队列也是一种逻辑数据结构,其具有先进先出的特性,只能在队的前端进行删除, 在队的后端进行插入。针对这种特性,可以实现一些较为复杂的逻辑。在实际应用中,部分程序也正需要这样一种顺序进出的数据处理方式。使用这样的逻辑处理方式,使得我们可以将更多精力放在如何处理顺序逻辑之外的事情,对于编程、开发来讲,提供了极大的方便。同stack类似,queue也可以看成是容器的容...

2019-02-13 19:53:16 4231

原创 STL详解(二) 栈容器Stack

一、Stack简介stack 是容器适配器的一种。要使用 stack,必须包含头文件 <stack>。stack就是“栈”。栈是一种后进先出的元素序列,访问和删除都只能对栈顶的元素(即最后一个被加入栈的元素)进行,并且元素也只能被添加到栈顶。栈内的元素不能访问。如果一定要访问栈内的元素,只能将其上方的元素全部从栈中删除,使之变成栈顶元素才可以。容器适配器中的数据是以 LIF...

2019-02-11 17:16:27 561

原创 STL 详解(十一)sort函数

做项目的时候,排序是一种经常要用到的操作。如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的时间,还很有可能写错。STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。Sort函数有三个参数:(1)第一个是要排序的数组的起始地址。(2)第二个是结束的地址(最后一位要排序的地址)(3)第三个参数是排序的方法,可以是从大到小也可是...

2019-02-08 09:26:49 198

原创 STL详解(八) 对组容器pair

一.解释:  pair是STL中的模板类型,它可以存储两个元素,它也被称作“对组”。没有什么成员函数,源代码很简单。 pair 是“二元结构体”的替代品,将两个元素捆绑在一起,节省编码时间。相当于以下定义: struct pair{ typename1 first; typename2 second; } pair将一对值组合成一个值...

2019-02-06 08:31:38 119

原创 STL详解(五) 双端队列容器deque

一、deuqe简介1、deuqe概念 容器deque和vector非常相似,属于序列式容器。都是采用动态数组来管理元素,提供随机存取,并且有着和vector一样的接口。不同的是deque具有首尾两端进行快速插入、删除的能力。2、Deque结构 如图1是deque的逻辑结构,从表面上看,deque具有连续性的存储空间,并支持随机存取功能。实际上deque并...

2019-02-02 07:32:02 295

原创 STL详解(六) 双向链表容器list

一、List 容器简介list是C++标准模版库(STL,Standard Template Library)中的部分内容。list容器实质是一个双向链表,可以高效地进行插入删除元素。list不提供随机访问功能,也就是不能用下标和at()访问,当删除其中一个元素,指向其他元素的迭代器依然有效。对于任何位置的元素插入或移除,list永远是常数时间List结构li...

2019-02-02 07:05:56 198

原创 STL详解(七) 集合容器set

一、set简介C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树,pair封装二元结构体等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排...

2019-02-01 22:26:16 135

原创 STL详解(一) 动态数组vector

一、Vectors介绍vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.1.文件包含:首先在程序开头处加上#include<vector>以包含所需要的类文件vector, 还有一定要加上using namespace std;...

2019-01-30 19:59:15 561

原创 C++语言篇 第九章 自定义函数详解

序言一个 C++ 程序无论大小,都由一个或者多个函数组成,而且其中必须有且只有一个函数main(),称之为“主函数”。由函数 main()调用其他函数来完成程序的特定功能。当然,其他函数之间也可以按照规则互相调用。C++ 中的函数由一段相对独立的代码组成,这段代码能实现某一项具体、独立、完整的功能。一、使用函数的目的:①“代码重用”:代码重用是保证同一个函数可以被一个或多个函数...

2019-01-28 21:51:19 579

原创 C++算法篇 动态规划----最短路

只有五行的Floyd最短路算法 此算法由Robert W. Floyd(罗伯特·弗洛伊德)于1962年发表在“Communications of the ACM”上。同年Stephen Warshall(史蒂芬·沃舍尔)也独立发表了这个算法。Robert W.Floyd这个牛人是朵奇葩,他原本在芝加哥大学读的文学,但是因为当时美国经济不太景气,找工作比较困难,无奈之下到西屋电气公...

2019-01-18 22:06:56 134

原创 C++语言篇 常用库函数

1、字符处理 ctype.h 2、数学函数 math.h3 、输入输出 stdio.h 4 、实用工具程序 stdlib.h  5 、字符串处理 string.h 程序应包含在math.h 函数类型 函数形式 功能 类型 ...

2019-01-11 13:38:50 173

原创 STL详解(十) 字符串string

使用场合:因为C风格字符串(以空字符结尾的字符数组)太过复杂难于掌握,不适合大程序的开发,所以C++标准库定义了一种string类,它不必担心内存是否足够及字符串长度,可以使用输入输出流方式直接进行操作,也可以通过文件等手段进行操作,同时C++的算法库对string也有着很好的支持 ,而且string还和c语言的字符串之间有着良好的接口,因此现在编程中涉及到字符串的处理,就可以直接使用stri...

2018-11-27 11:00:16 955

原创 C++语言篇 第八章 结构体

概述 迄今为止,我们介绍了简单的数据类型:整形、实型、字符型以及数组定义的变量,其中数组中各元素都具有相同的类型。 现在,我们要处理一个学生的数据: 包括姓名, 年级, 性别, 地址等不同的数据类型又该如何处理? 在数据库中,我们通常要用“记录”来描述一个实体:如学生、教材、…… 在C语言中,允许程序员自定义类型,这就是结构: 一、结构体(struct)定义和操作第一种定义方式: ...

2021-02-15 14:35:33 108

原创 C++语言篇 第七章 二维数组

一、二维数组的定义 当一维数组元素的类型也是一维数组时,便构成了“数组的数组”,即二维数组。 二维数组定义的一般格式: 数据类型 数组名[常量表达式1] [常量表达式2] ; 例如:int a[4][10]; a数组实质上是一个有4行、10列的表格,表格中可储存40个元素。第1行第1列对应a数组的a[0][0],第n行第m列对应数组元素a[n-1][m-1]。 说明:当定义的数组下标有多个时,我们称为多维数组,下标的个数并不局限在一个或二个,可以任意多...

2021-02-15 10:55:04 98

原创 读程序写结果 选拔培训

一、看程序写结果:1、NOIP 2013 普及组初赛23题#include<bits/stdc++.h>using namespace std;int main(){ int a, b; cin >> a >> b; cout << a << "+" << b << "=" << a + b << endl;}输入: 3 5输出: 2...

2020-11-29 18:00:50 243

原创 老班学习规划

[OI wi-ki](https://oi-wiki.org)## 第一周 差分前缀和[ 差分前缀和 学习博客1](https://blog.csdn.net/qq_36561697/article/details/81160583)[ 差分前缀和 学习博客2](https://www.cnblogs.com/zengpeichen/p/11279207.html)[二维前缀和](https://blog.csdn.net/qq_34990731/article/details/828078

2020-11-25 15:33:59 238

原创 C++ 算法篇 高精度

第一章 高精度计算 利用计算机进行数值计算,有时会遇到这样的问题:有些计算要求精度高,希望计算的数的位数可达几十位甚至几百位,虽然计算机的计算精度也算较高了,但因受到硬件的限制,往往达不到实际问题所要求的精度。我们可以利用程序设计的方法去实现这样的高精度计算。介绍常用的几种高精度计算的方法。 高精度计算中需要处理好以下几个问题: (1)数据的接收方法和存贮方法: 第一种方法是:当输入的数很长时,可采用字符串方式输入,这样可输入数...

2020-11-17 09:34:25 192

原创 C++算法篇 快速幂

让我们先来思考一个问题:7的10次方,怎样算比较快?方法1:最朴素的想法,7*7=49,49*7=343,... 一步一步算,共进行了9次乘法。这样算无疑太慢了,尤其对计算机的CPU而言,每次运算只乘上一个个位数,无疑太屈才了。这时我们想到,也许可以拆分问题。方法2:先算7的5次方,即7*7*7*7*7,再算它的平方,共进行了5次乘法。但这并不是最优解,因为对于“7的5次方”,我们仍然可以拆分问题。方法3:先算7*7得49,则7的5次方为49*49*7,再算它的平方,共进行了4次乘法。

2020-09-29 17:06:30 96

原创 C++算法篇 十大经典排序算法

排序算法是中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序。关于时间复杂度平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。线性对数阶 (O(nlog2n)) 排序: 快速排序、堆排序和归并排序;O(n1+§)) 排序,§ 是介于 0

2020-09-28 11:07:38 143

原创 C++ 算法篇 动态规划----状态压缩

一、总述状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式。很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用。状压dp其实就是将状态压缩成2进制来保存 其特征就是看起来有点像搜索,每个格子的状态只有1或0 ,是另一类非常典型的动态规划举个例子:有一个大小为n*n的农田,我们可以在任意处种田,现在来描述一下某一行的某种状态:设n = 9;有二进制数 100011011(九位),每一位表示该农田是否被占用,1表示用了,0表示没用,这

2020-09-22 08:44:20 118

原创 提纲

第一节课 数据结构一(分块、树状数组、线段树) 第2章 第二节课 数据结构二(单调队列、单调栈、并查集、倍增) 第3章 第三节课 动态规划一(状压DP、树形DP、数位DP) 第4章 第四节课 动态规划二(区间DP、计数类DP、期望概率DP) 第5章 第五节课 动态规划三(常见优化:单调队列、倍增、线段树、分治) 第6章 第六节课 基础数论(筛质数、乘法逆元、扩展欧几里得、中国剩余定理) 第...

2020-09-21 09:30:38 64 1

原创 C++ 算法篇 动态规划----背包之七 有依赖的背包问题

有依赖的背包问题 1、金明的预算方案NOIP 2006 提高组 第二题题目描述:金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:主件 附件电脑 打印机,扫描仪书柜 图书书桌 台灯,文具工作椅 无如果要买归...

2020-09-15 19:02:54 125

原创 C++ 算法篇 动态规划----背包之六 分组背包

分组背包问题:有N件物品和一个容量为V的背包。第i件物品的费用是w[i],价值是c[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。算法:  这个问题变成了每组物品有若干种策略:是选择本组的某一件,还是一件都不选。也就是说设f[k][v]表示前k组物品花费费用v能取得的最大权值,则有f[k][v]=max{f[k-1][v],f[k-1][v-w[i]]+c[i]|物品i属于第k组}。使用一维..

2020-09-15 19:01:48 118

原创 C++ 算法篇 动态规划----背包之五 二维费用背包

二维费用背包二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为c[i]。算法  费用加了一维,只需状态也加一维即可。设f[i][v][u]表示前i件物品付出两种代价分别为v和u时可获得的最大价值。  状态转移方程就是:f [i]

2020-09-15 19:01:29 77

原创 C++ 算法篇 动态规划----背包之四 混合背包

混合背包   如果将01背包、完全背包、多重背包混合起来。也就是说,有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。应该怎么求解呢?01背包与完全背包的混合  考虑到在01背包和完全背包中最后给出的伪代码只有一处不同,故如果只有两类物品:一类物品只能取一次,另一类物品可以取无限次,那么只需在对每个物品应用转移方程时,根据物品的类别选用顺序或逆序的循环即可,复杂度是O(VN)。伪代码如下:for i=1..N if 第i件物品是0

2020-09-15 18:58:23 79

原创 C++ 算法篇 动态规划----背包之三 多重背包

多重背包有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是w[i],价值是c[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本算法:  这题目和完全背包问题很类似。基本的方程只需将完全背包问题的方程略微一改即可,因为对于第i种物品有n[i]+1种策略:取0件,取1件……取n[i] 件。令f[i][v]表示前i种物品恰放入一个容量为v的背包的最大权值,则:f [i] [v] = max { f [i] [v] , f [...

2020-09-15 18:55:55 62

原创 C++ 算法篇 动态规划----背包之二 完全背包

完全背包问题:有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是w[i],价值是c[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路:   这个问题非常类似于01背包问题,所不同的是每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件……等很多种。如果仍然按照解01背包时的思路,令f[i][v]表示前i种物品恰放入一个容量为v的背包的最大权值。仍然可以按照每种物品不...

2020-09-15 18:52:48 240

原创 C++ 算法篇 动态规划----区间动态规划

区间动态规划的含义与模板解释区间DP,其实求的就是一个区间内的最优值.一般这种题目,在设置状态的时候,都可以设f[i][j]为区间i-j的最优值而f[i][j]的最优值,这有两个小区间合并而来的,为了划分这两个更小的区间,我们则需用用一个循环变量k来枚举,而一般的状态转移方程便是:f[i][j] = max/min (f[i][j] , f[i][k] + f[k][j] + something) 我们则需要根据这个题目的实际含义进行变通即可.而区间dp的大致模板是:for (..

2020-09-13 14:33:00 426

原创 C++ 算法篇 递推算法习题答案

例1、一个数字三角形#include<iostream>using namespace std;int main(){ int n,i,j,a[101][101]; cin>>n; for (i=1;i<=n;i++) for (j=1;j<=i;j++) cin>>a[i][j]; //输入数字三角形的值 for (i=n-1;i>=1;i--) for (j=1;j<=i;j++)

2020-09-02 14:10:41 121

原创 C++ 算法篇 动态规划练习

3、装箱问题 NOIP2001普及组时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld题目描述有一个箱子容量为V(正整数,0 ≤ V ≤ 20000),同时有n个物品(0<n ≤ 30),每个物品有一个体积(正整数)。要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。输入描述:1个整数,表示箱子容量1个整数,表示有n个物品接下来n行,分别表示这n个物品的各自体积输出描述:.

2020-09-01 14:43:57 53

原创 动态规划(一)简单基础DP

简单基础dp这类dp主要是一些状态比较容易表示,转移方程比较好想,问题比较基本常见的。主要包括递推、背包、LIS(最长递增序列),LCS(最长公共子序列),下面针对这几种类型,推荐一下比较好的学习资料和题目。一、递推:递推一般形式比较单一,从前往后,分类枚举就行。简单:1、数塔 (简单从上往下递推).hdu 2018 母牛的故事简单递推计数hdu 2044 ...

2020-08-31 11:04:35 50

原创 STL章节练习答案

一、vector(动态数组)二、stack(栈)1、表达式括号匹配#include<bits/stdc++.h>using namespace std;int main(){ char a; stack <char> st; do { a=getchar(); if(a=='(' ) st.push(a); ...

2020-08-31 10:06:59 73

原创 C++ 算法篇 深度优先搜索(DFS)习题答案

1、瓷砖#include<bits/stdc++.h>using namespace std;int a[51][51]={0},ans=0;void dfs(int x,int y){ ans++; a[x][y]=false; if(a[x-1][y]) dfs(x-1,y); if(a[x+1][y]) dfs(x+1,y); if(a[x][y-1]) dfs(x,y-1); if(a[x][y+1]) dfs(x,y+1);}

2020-08-31 09:53:56 181

原创 C++ 算法篇 递推

递推“递推”是计算机解题的一种常用方法。利用“递推法”解题首先要分析归纳出“递推关系”。如经典的斐波那契数列问题,用 f (i)表示第 i 项的值,则 f (1) =0,f(2) =1,在 n>2 时,存在递推关系:f (n) = f(n-1) + f(n-2)。 在递推问题模型中,每个数据项都与它前面的若干个数据项(或后面的若干个数据项)存在一定的关联,这种关联一般是通过一个“递推关系式”来描述的。求解问题时,需要从初始的一个或若干数据项出发,通过递推关系式逐步推进,从而推导计...

2020-08-26 20:26:42 820

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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