算法与数据结构
文章平均质量分 65
很难绷得住
点波关注不迷路
展开
-
关于DP中完全背包的遍历次序探讨
先回顾一下几个背包问题的定义:01背包:每个物品只有取或者不取两个状态完全背包:每个物品可以取无限多次多重背包:每个物品可以多次取,但次数不同众所周知,01背包使用二维dp可以任意交换物品顺序与背包顺序,用一维dp的话必须先物品再背包且背包为倒序,不然会重复拿物品,倒序遍历的原因是,本质上还是一个对二维数组的遍历,并且右下角的值依赖上一层左上角的值,因此需要保证左边的值仍然是上一层的,从右向左覆盖。完全背包完全背包的两个for循环的先后顺序都是可以的。注意,纯完全背包求得是能否凑成总和,即dp数组中存原创 2022-07-13 17:07:57 · 423 阅读 · 4 评论 -
C++ 刷题语法整理
substr()是C++语言函数,主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度。如果没有指定长度_Count或_Count+_Off超出了源字符串的长度,则子字符串将延续到源字符串的结尾。——摘自百科词条语法substr(size_type _Off = 0,size_type _Count = npos)一种构造string的方法形式 : s.substr(pos, len)返回值: string,包含s中从pos开始的len个字符的**拷贝**(pos的默认值是0,len的默原创 2022-05-31 11:01:47 · 362 阅读 · 0 评论 -
C++非递归中序遍历
template<class T>void linktree<T>::inordertravle()//非递归中序遍历{ if (rootpt == nullptr) { cout << "该结点为空" << endl; return ; } linkstack< treenode<T>* >s; treenode<T>* ptem = rootpt; while (ptem != nullptr |原创 2021-08-09 20:39:02 · 338 阅读 · 0 评论 -
C++实现双向链表
dblinkt的数据成员为长度和类型指向Node的指针,在此将其命名head。其他人的双链表实现为建立两个指向Node的指针,分别取名为first和end,在这里,在链表构造函数中让head指向new开辟的一个内存空间,该内存模型即为Node类的模型,其中有一个数据域,我们不适用他也就不管他,还有两个链接域,可以当做first和end使用,即head->pre就是first,head->next就是end。原创 2021-07-28 22:18:26 · 954 阅读 · 0 评论 -
C++排序算法
02.从最右边开始找,直到找到小于piv的数,将p2移到这个位置,这个数放错了位置(小于piv的数应该在piv左边),于是将其放在p1的位置。03.从p1开始找大于piv的数,将p1移到这个位置,这个数放错了位置(大于piv的数应该在piv右边),于是将其放在p2的位置。04.p1p2经过0203步骤他们呈现贴近趋势,再重复0203,直到他们会和,会和的位置即piv做为分界数应该在的位置。03.将真正的最小数与第一个数交换位置,并以这个位置为起点重复123步。02.p1为第一数,p2为最后一个数。...原创 2021-08-04 21:08:18 · 230 阅读 · 0 评论