
c++
文章平均质量分 77
bj_zhb
这个作者很懒,什么都没留下…
展开
-
C++算法初级11——01背包问题(动态规划2)
医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。所以,当我们计算第i行时,完全可以将j从大到小枚举,这样在计算状态f(i,j)之前,数组f[j]中存储的是状态f[i−1,j],更新完以后,其中,所有奇数行的状态填入f[1][j]中,所有偶数行的状态填入f[0][j]中,如下图。所以,我们维护一个二维状态f[i,j], 来表示前i个物品,放到体积为j的背包里,可以得到的最大价值。所以,整个动态规划的过程就是一个”填表“的过程。原创 2023-04-27 15:26:28 · 1280 阅读 · 1 评论 -
C++算法初级10——动态规划
那么,观察这个等式,会发现如果我们已知f[i - 1][j - 1]和f[i - 1][j],就可以求出f[i][j]。但是,我们发现,找到”从顶点到达7“和”从顶点到达4“的最大路径,就是一个和原问题”从顶点到达2“结构相似的问题!我们用a[i][j]存储数字金字塔第i行第j列的数字,用f[i][j]表示”从顶点到达第i行第j列“的所有路径中最大的数字和。动态规划实质上是一种以空间换时间的技术,它在实现的过程中,不得不存储产生过程中的各种状态,所以它的空间复杂度要大于其他的算法。原创 2023-04-18 11:36:41 · 688 阅读 · 0 评论 -
C++算法初级9——递归
递归,简单地来说,就是一个函数自己调用自己。函数f()就好像是工厂中生产零件的模板,每次我们调用函数f()的时候,都会依照模板生产一个新的零件,名字叫“函数f()”。我们调用了很多次函数f(),也就是生产了很多名字相同的零件,它们的模样也相同,但是它们是不同的零件,因为我对一个零件操作不会影响到其他零件。另外,两个函数相互调用也算是递归的一种,只要涉及到“函数自己调用自己”,都可以称为递归。原创 2023-04-16 20:33:11 · 633 阅读 · 0 评论 -
c++算法初级8——递推
由于合法括号序列的最后一个字符一定是右括号,不妨假设最终的括号序列长成这个样子:A(B)。A由m对括号组成,B由k-1-m对括号组成,这样的序列有f[m] * f[k-1-m]种。A由0对括号组成,B由k-1对括号组成,这样的序列有f[0] * f[k-1]种。A由1对括号组成,B由k-2对括号组成,这样的序列有f[1] * f[k-2]种。A由2对括号组成,B由k-3对括号组成,这样的序列有f[2] * f[k-3]种。A由k-1对括号组成,B由0对括号组成,这样的序列有f[k-1] * f[0]种。原创 2023-04-12 17:23:35 · 1225 阅读 · 0 评论 -
C++算法初级7——二分查找
我们再来看一下二分查找的思路:我们设定一个初始的L和R,保证答案在[L,R]中,当[L,R]中不止有一个数字的时候,取区间的中点M,询问这个中点和答案的关系,来判断答案是M,还是位于[L,M-1]中,还是位于[M+1,R]中。二分查找的时间复杂度:O(log n),因为每次询问会使可行区间的长度变为原来的一半。二分查找的原理:每次排除掉一半答案,使可能的答案区间快速缩小。原创 2023-04-09 17:13:47 · 3045 阅读 · 0 评论 -
C++算法初级6——排序2(快速、归并、计数排序)
令l和r分别为当前区间的左右端点。下面假设我们对l到r子段内的数字进行划分。取pivot = a[l]为分界线,将pivot的数字移到右边,然后将pivot放在中间。假设pivot的位置是k。如果右边区间[k+1…r]长度大于1,则设置新的区间[k+1, r],重复调用上面的过程。k-1]长度大于1,则对于新的区间[l…k-1],重复调用上面的过程。假设我们要对数组a[1…当整个过程结束以后,整个序列排序完毕。代码实现,不调用sort。原创 2023-04-08 17:32:06 · 750 阅读 · 0 评论 -
C++算法初级5——排序1(选择、插入、冒泡)
本文介绍排序的几种方法,默认均为从小到大排序,内容来源参考boyuai。原创 2023-04-07 12:25:03 · 436 阅读 · 0 评论 -
纸币支付方案
纸币支付方案原创 2022-09-04 19:20:15 · 275 阅读 · 0 评论 -
C++算法初级4——排列枚举
枚举排列原创 2022-08-25 21:37:14 · 1464 阅读 · 1 评论 -
C++算法初级1——模拟与高精度
C++算法初级原创 2022-08-12 16:26:41 · 1484 阅读 · 0 评论 -
C++基础——类和对象
C++面向对象知识点汇总原创 2022-07-08 10:56:06 · 291 阅读 · 0 评论 -
C++语法基础——引用
知识点引用可以理解为变量的"别名"。同时,也可以理解为一个type *const指针,即指针指向的对象的值可变,但指针本身的地址不可变。在指针的基础上,引用省略了取地址和解引用。对引用的操作(求值,修改等)始终绑定在原对象上。知识点如果想在函数内修改一个对象(而非数组)的值,传引用是更现代的方式。**引用的另一个作用是可以让函数返回多个值。**此时,只要传入多个引用,然后把他们当作返回值修改即可。即使不需要修改传入对象的值,按引用传递往往也是更高效的方式,减小了开销。此时,常常使用常量引用传递。..原创 2022-07-07 21:25:20 · 444 阅读 · 0 评论 -
C++返回指针的函数
指向全局变量的指针可以作为函数返回值。但局部变量不可以。局部变量的生命周期为:声明时,直到当前作用域(花括号)结束。函数返回后,该局部变量对应内存被回收,指向它的指针无意义。指向new得到的内存的指针可以作为返回值。该内存在堆上分配,直到被delete之前都不会被回收。...原创 2022-07-06 16:00:21 · 1542 阅读 · 0 评论 -
C++算法初级3——子集枚举
文章目录子集枚举1. 引入2. 子集的表示方式a. 数组表示法b. 子集的表示方式 -- 01比特串法子集枚举1. 引入子集枚举,顾名思义就是在枚举所有子集。为了解释这句话,我们需要先明确几个概念:集合: 集合就是包含一些对象的整体。比如一个学校里,“全体同学”就是包含所有同学的集合;“全体男生”就是包含所有男同学的集合,“全体女生”就是包含所有女同学的集合。子集: 子集就是只包含某集合中一部分对象的集合。比如在学校中的“全体同学”里,“经管系的同学”就是“全体同学”的一个子集。另外,每个非空原创 2022-04-20 21:58:12 · 6508 阅读 · 3 评论 -
c++算法初级2——暴力枚举优化
文章目录枚举优化能算则算能存则存枚举优化在上面的做法中,我们给出的都是最简单直接的算法。但是当复杂度为O(n2)O(n^2)O(n2)时,个人电脑在1s之内可能只能处理最多10410^4104的数据规模,而当算法复杂度到O(n4)O(n^4)O(n4)时,可能数据规模最多只能是10210^2102,所以非常低效。所以,下面我们给出一些枚举算法的优化思路:能算则算可以通过必要的计算规避一些不必要的枚举。比如在上面的统计矩形的例子中,我们枚举左上角之后,长方形和正方形满足条件的右下角个数可以通过计算原创 2022-04-19 22:03:02 · 2007 阅读 · 1 评论 -
Dev C++无法调试解决办法
今天博主在使用Dev C++刷算法题时,突然遇到无法调试的问题,问题具体情况为:可以设置断点,但是程序在断点的地方根本不停止,直接运行过去。(我以前是可以调试的,什么也没改,今天突然不行了)在网上查找好多办法无果(我以前可以调试的,配置都是对的),最后发现是程序命名的问题,在这里也题型大家,不要用奇奇怪怪的名字给程序命名,否则会出现奇奇怪怪的错误!大家注意程序命名,多编译几次就应该可以了。...原创 2021-05-11 21:50:18 · 2512 阅读 · 0 评论 -
C++Error2208:…尝试引用已删除的函数
C++Error2208:…尝试引用已删除的函数在使用自己编写的类实例化c++linklist,结果编译器报了以下错误错误 C2280 “LList::LList(const LList &)”: 尝试引用已删除的函数 l从错误的内容看,似乎是自己的类的赋值构造函数被尝试调用却发现其已被删除。一般而言,对象的赋值构造函数如果开发者没有提供,则编译器会生成默认的赋值构造函数。然...原创 2019-12-18 18:18:16 · 8010 阅读 · 0 评论 -
C++“(已隐式声明)--它是已删除的函数 ” “尝试引用已删除的函数”知识点MARK
今天写一个简单BFS遇到了一个新bug,是一个之前忽略掉的知识点,特此mark一下。错误如下:c++类在初始化的时候有两种方式: M_CLASS m_class(...); M_CLASS m_class = M_CLASS(...);编译器对二者处理的不同之处在于:前者通过构造函数直接对对象m_class中的成员变量进行赋值,而后者则是先初始化一个临时变量并对其赋值,然后将该临时变量...转载 2019-12-06 16:18:07 · 2569 阅读 · 0 评论 -
引发了异常: 读取访问权限冲突。 pointg-> 是 0x5。
引发了异常: 读取访问权限冲突。 pointg-> 是 0x5。原创 2019-12-03 18:21:12 · 3894 阅读 · 0 评论 -
c++获取string的每个字符
1.类似于使用数组string a = “abcdef”;int num = a.length();for (int i = 0; i < num; ++i){cout << a[i];}2.使用for循环string a = “asdfa”;for (char ch : a)cout << ch;cout << a.length()...转载 2019-11-09 19:17:19 · 24622 阅读 · 0 评论 -
c++new用法
C++ new 的基本和高级用法推荐文章 http://kelvinh.github.io/blog/2014/04/19/research-on-operator-new-and-delete/new 的基本用法int *a = new int[5];class A {...} //声明一个类 AA *obj = new A(); //使用 new 创建对象delete []a...转载 2019-10-30 19:58:08 · 215 阅读 · 0 评论 -
template 中typename T 与template class T区别
在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?相信学习C++的人对class这个关键字都非常明白,class用于定义类,在模板引入c++后,最初定义模板的方法为: template…在这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个...转载 2019-10-19 20:39:28 · 1870 阅读 · 0 评论 -
c++虚函数的作用
虚函数的作用:通过以下两个程序来进行解释!可以让成员函数操作一般化,用基类的指针指向不同的派生类的对象时,基类指针调用其虚成员函数,则会调用其真正指向对象的成员函数,而不是基类中定义的成员函数(只要派生类改写了该成员函数)。若不是虚函数,则不管基类指针指向的哪个派生类对象,调用时都会调用基类中定义的那个函数。程序1:#include <iostream>using n...原创 2019-10-18 23:01:57 · 1538 阅读 · 0 评论