自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

75 69 69 80 32 67 79 68 73 78 71 33

我们不搬运BUG,我们是BUG的出厂商!

  • 博客(105)
  • 资源 (3)
  • 问答 (2)
  • 收藏
  • 关注

原创 搜索问题之状态空间搜索(状态压缩+记忆化搜索+ BFS)

1. 前言之前介绍的回溯法常用于 解空间的搜索 问题,即 找到一个或者所有满足约束条件的解,它通常是将解空间组织成树或者图,然后进行DFS(深度优先遍历)并注意在搜索的时候进行 剪枝操作。但是状态空间搜索则是需要 找到一条从起始状态到终止状态的路径,其一般需要考虑一下问题:状态的表示,即我们怎样表示一个状态。状态的转移,即通过研究初始状态和目标状态的 差别 ,我们定义怎样的操作来进行状态...

2019-10-25 11:52:38 1832

原创 C++中的内存操作

1. memcpy#include<string.h>void* memcpy(void* dest , void* src, unsigned int count)将源地址src指向内存区域的count个字节赋值到dest为起始地址的内存区域src和dest所指内存区域不能重叠,函数返回指向dest的指针注意,对象不能是简单的内存拷贝,例如C++中STL的字符串类型st...

2019-10-24 15:33:44 721

原创 (UVA 1354) Mobile Computing(子集枚举+深搜剪枝)

原题连接:UVA 1354题目大意题目分析可以把挂坠和横放的木棍都看成结点,则整个天平就是一个二叉树,且每个结点要么是叶子结点要么是有2个孩子的内部结点,例如上图中的3种天平就对应于下图3个二叉树:而且不同的天平之间可以重叠。同时,对于一棵确定的二叉树,可以计算出每个天平的确切位置,进而计算出整个天平的宽度。所以,本题的核心是:如何枚举出所有需要的二叉树。下面介绍两种方法:自底向上...

2019-10-23 20:45:52 657

原创 五大常用算法入门(一)——贪心算法

文章目录1.贪心算法简介1.1 基本定义1.2 贪心算法案例3.贪心算法的基本思路2.贪心算法最优性证明2.1 贪心算法的前提2.2 最优子结构2.3 贪心算法与动态规划的区别3.贪心算法的经典问题3.1 近似解3.2 最优解参考资料1.贪心算法简介1.1 基本定义在贪婪算法(greedy method) 中,我们要逐步构造一个最优解。每一步,我们都在一定的标准下,做出一个最优决策。做出决策...

2019-10-18 10:28:17 19963 10

原创 五大常用算法入门(三)——回溯算法

文章目录1. 写在前面2. 例子引入3. 正式定义1. 写在前面在正式介绍回溯算法的时候,我们先来回顾一下之前写的解答树的例子。1.1 排列树如果要生成 1−n1-n1−n 的所有排列或者要生成含有 nnn 个元素集合的一个排列,则我们会构造一棵排列树,例如当 n=3n=3n=3 时:我们能得到 3!=3∗2∗1=63!=3*2*1=63!=3∗2∗1=6个叶子结点,每个叶子结点代表一...

2019-10-18 10:27:54 831

原创 子集生成(子集树+递归回溯)

文章目录1.问题定义2. 增量构造法3. 位向量法3. 二进制法1.问题定义给定一个集合,枚举所有可能的子集,为了简单起见,假设集合中的元素不重复。则 nnn 个元素的集合会有 2n2^n2n 个子集,而且不相同。下列算法均以生成 {1,2,…,n}的子集为例。2. 增量构造法void subset1(int* A, int n,int cur) { /* n为原集合的元素个数,cur...

2019-10-17 19:44:46 787

原创 集合元素全排列的生成(排列树+递归回溯)

文章目录1. 问题定义2. 递归生成1~n的排列3. 复杂度分析4. 排列树(解答树)5.可重集的全排列6. STL中的下一个排列函数1. 问题定义输入整数n,按照字典序从小到大输出前n个数得到所有排列。即若n=3,则有全排列 {123,132,213,231,312,321}\{123,132,213,231,312,321\}{123,132,213,231,312,321}。或者输...

2019-10-17 14:35:51 1994 1

原创 C++基础之printf()输出整数注意事项

1. 各类型所占字节在C语言中,常用的整数类型有short、int、long (int)、long long,其所占用字节如下:类型字节short2int4long4/8 (取决于32位/64位机器)long long8可以看到long占用的字节不低于int。2.各类型的格式符类型格式short%hdint%...

2019-10-15 20:12:08 3878

原创 (UVA 1103) Ancient Meesages(DFS连通分量计数+种子填充floodfill算法)

原题:UVA 1103洛谷 古代象形符号问题描述问题输入输出输入输出输入输出样例Input:6 2007c447c30006 250000000000000000000000000000000000000000000000000000001fe0000000000007c000000003fe0000000000007c000000000000000...

2019-10-11 23:02:02 265

原创 最短路径之Bellman-Ford算法——动态规划

Bellman-Ford算法主要针对带有负值的单源最短路径问题,当有向图带有其权小于0的边的时候,不能使用迪杰斯特拉算法,但是只要不是带负权的回路,我们依然可以使用Bellman-Ford算法。1.算法原理Bellman-Ford算法的核心思想是动态规划,即我们需要定义子问题的状态 和动态规划递归式。讨论前提如果图中共有nnn个顶点,则所有的最短路径最多只有n−1n-1n−1条边。...

2019-10-11 10:36:30 2150

原创 实现大整数类别(C++)

使用数组来实现非负大整数类,即每WIDTH位数字保存成数组中的一个元素。/* 实现大整数类 */#include<vector>#include<string>#include<stdio.h>#include<algorithm>#include<iostream>using namespace std;struct...

2019-10-09 12:08:11 921

原创 C++程序测试(随机数生成+时间记录)

文章目录1.随机数生成1.1 随机数发生器 rand()1.2 随机数种子2.时间记录2.1 clock()计时函数2.2 每秒的时钟单元数3.程序正确性证明1.随机数生成1.1 随机数发生器 rand()包含在头文件<stdlib.h>中的函数rand()可生成一个随机数,其有以下特点:其形式 int rand(void) 内部使用线性同余法产生随机数,是“伪随机数”,只不...

2019-10-08 23:16:29 1459

原创 (UVa 136) Ugly Numbers(丑数的生成+整数分解定理+优先队列)

原题:https://vjudge.net/problem/UVA-136题目大意题目分析先介绍整数的唯一分解定理:即:任意大于1的正整数都可以唯一分解成若干素数的乘积。而本题的素数因子只能是2,3,5,所以抽数必定是如下形式:x=2p∗3q∗5rx = 2^p* 3^q*5^rx=2p∗3q∗5r,其中 p,q,r为非负整数p,q,r为非负整数p,q,r为非负整数。所以,我们...

2019-10-08 22:42:36 317

原创 (UVA 540) Team Queue(团队队列+模拟)

原题:https://vjudge.net/problem/UVA-540题目大意这是一道比较贴近实际生活的模拟题。即假设一个食堂在排队买饭的队列,如果你有认识的人你可能会插队,排在你认识的最后一个人的后面(虽然这种做法并不太对)。然后你需要模拟这种场景,而且入队和出队应该尽可能的高效。题目分析由于你会优先插入到认识的人后面,所以在长队中人们总是以团体在一起,相同团队的人不会被分割开,...

2019-10-08 20:09:09 279

原创 C++基础之函数指针

文章目录1.简介2. 用法2.1 声明2.2 函数调用2.3 函数参数1.简介函数指针 本身是一个指针变量,与指向整数的指针int* a类似,只不过它指向的是一个函数。C语言编译的时候,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。其一般有两个用途:调用函数和做函数的参数。2. 用法2.1 声明与 数组指针 的声明一样,函数指针的声明也需要括号 (因为算符优先级的...

2019-10-07 14:25:18 373

原创 (UVA 202) Repeating Decimals(除法模拟+哈希映射)

原题:https://vjudge.net/problem/UVA-202题目大意题目分析手动模拟除法运算:先输出整数部分,然后a变成余数*10,用数组ans记录下小数的商,建立哈希表,初始值为-1将此时的余数a的位置用哈希表记录下来(位置从0开始,0表示整数位值,从1开始便是小数位的商)然后继续计算a / b,将商压入ans,如果余数出现过,即哈希表的值不为-1,表示开始出现循环...

2019-10-06 19:32:02 189

原创 C++中STL容器之哈希容器

文章目录1. 介绍2.常见容器3.unorder_map()3.1 构造函数3.2 成员函数4. unorder_set()1. 介绍前面介绍的 map/multimap、set/multiset底层都是基于红黑树实现的,复杂度大致在O(logn)O(logn)O(logn),本次介绍的容器底层都是基于哈希(hash)表,具有很快的映射速度。基于哈希表,数据的插入和查找的时间复杂度都很低,几...

2019-10-06 18:44:54 1021

原创 C语言中使用scanf()对字符(串)进行输入的问题

1. 输入字符串#include<stdio.h>int main() { int a; char s1[100]; char s2[100]; scanf("%d", &a); scanf("%s", s1); scanf("%s", s2); printf("a = %d\n", a); printf("s1 = %s\n", s1); prin...

2019-10-05 19:28:53 715

原创 (UVa 227) Puzzle(字符输入输出+坑)

原题:https://vjudge.net/problem/UVA-227题目大意题目分析很简单的到入门题目,涉及到字符(串)的输入和输出,坑比较多,下面贴出我的踩过的坑:scanf(“c”)输入字符遇到回车、空格、换行都会停止,但是输入的地图中有空格,所以我使用getchar()逐个字符进行输入,但是需要判断很多情况若空格方块在某一行的最后,则输入的是'\n',需要将其转换成' '...

2019-10-04 16:35:23 192

原创 OJ技巧之打表(用空间换时间)

1. 前言有时候求解OJ算法题,会遇到多样例测试的情况,而且样例之间的求解过程有重复,则我们可以使用打表技巧,将求解过的样例结果(或者问题所有的求解结果)事先计算并存储下来,称之为打表。然后,每当求解一个样例时,即可直接取出结果,当样例数较多时,则可以节省大量不必要的重复。2.例子原题链接:UVa1583题解#include<stdio.h>#include<s...

2019-09-30 17:42:34 1745 1

原创 数据结构——二叉排序树+AVL树

文章目录@[TOC]1. 定义2.基本操作1. 定义二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),其递归定义如下:一棵空树或者是有以下性质的二叉树左子树不空,则左子树上所有结点的值均小于它的根节点的值右子树不空,则右子树上所有结点的值均大于它根节点的值左右子树也是二叉排序树例如,下图这棵树就是一棵二叉排序树:容...

2019-09-09 21:31:58 2057

原创 数据结构——特殊的二叉树

文章目录1.普通二叉树2.满二叉树3.哈夫曼树4.二叉排序树5.平衡二叉树6.红黑树1.普通二叉树1.1 定义二叉树的定义是一种递归定义,它的特点是每个结点至多只存在两棵子树(即二叉树中不存在度大于2的结点),且左右子树有先后顺序之分。一棵二叉树要么是空树,要么是一个根结点加上左、右子树组成的二叉树。其中,左右子树也都是二叉树。二叉树有5种基本的状态:1.2 性质二叉树的常见性质:...

2019-09-06 19:11:49 493

原创 (PAT Advanced) 1065 A+B and C (64bit) (迷惑的小明+整数溢出判断) C++

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805406352654336题目大意题目不难,主要输入3个数,A,B,C,然后判断A+B是否大于C,但是主要整数的范围是[−263,263][-2^{63},2^{63}][−263,263],若以若用long int存储,则可能会超出表示范围,具体可参照 计算...

2019-09-06 15:01:04 304 1

原创 (PAT Advance)1063.Set Similarity (集合+交并比) C++

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805409175420928题目大意给出多个集合元素,求任意两个集合的相似度,即交并比:两个集合的交集元素个数/两个集合的并集元素个数。方法1(暴力模拟+最后一个测试点超时)由于C++中Set数据结构即为我们常见的集合,满足不重复,且会自动排序,底部存储为红...

2019-09-06 11:58:13 316

原创 (PAT Advanced)1060.Are They Equal (字符串处理+科学计数法) C++

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805413520719872题目大意给定计算机的有效数字N,和两个浮点数,将浮点数转成科学计数法表示,超出有效数字的部分直接截掉。题目分析用字符串或字符数组存储浮点数,先确定指数的大小:搜索小数点的位置dot,如果不存在小数点,则dot = 字符串的长度...

2019-09-05 11:26:07 197

原创 (PAT Advanced)1059 Prime Factors (整数的素因子分解) C++

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805415005503488题目大意将一个大整数分解成多个质数的乘积,具体请搜索数论——正整数的唯一分解定理。解法1(素数筛选和匹配)筛选法的思路是建议一个大小为maxn的素数表,假定初始全是素数,然后逐个划掉,即1不是素数,花掉;2是素数,则所有2的倍速均...

2019-09-04 21:14:45 389

原创 (PAT Advanced)1057 Stack(树状数组+二分查找) C++

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805417945710592Sample Input:17PopPeekMedianPush 3PeekMedianPush 2PeekMedianPush 1PeekMedianPopPopPush 5Push 4PeekMedian...

2019-09-04 19:28:53 227

转载 数据结构——树状数组

文章目录1.树状数组的基础2.树状数组的基本操作2.1.单点更新2.2 区间查询2.3 例题练习3.高级应用3.1 求逆序对3.2 稍进阶操作4.例题收录1.树状数组的基础树状数组 是一个查询和修改复杂度都在O(logn)O(logn)O(logn) 的数据结构,主要用于数组的单点修改和区间求和。一般,我们常见的二叉树是这样画的:叶子节点代表A数组,A[1]~A[8]。然后,我们稍微变...

2019-09-04 18:43:35 400

原创 (PAT Advanced) 1056.Mice and Rice (队列的使用——比赛晋级淘汰模拟) C++

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805419468242944题目大意np为老鼠的体重,ng为每组最多的老鼠数量,给出每个老鼠的体重,和初始顺序。然后每ng个老鼠为一组,挑选每组中体重最大的老鼠晋级下一轮,然后剩下的未晋级的老鼠给予相同评级,即若当前晋级group只老鼠,则剩下老鼠的评级统一为g...

2019-09-03 19:44:05 244

原创 (PAT Advanced)1055.The World's Richest (结构体排序)

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805421066272768Sample Input:12 4Zoe_Bill 35 2333Bob_Volk 24 5888Anny_Cin 95 999999Williams 30 -22Cindy 76 76000Alice 18 88888...

2019-09-03 12:32:31 270

原创 (PAT Advanced)1049.Counting Ones (数学问题,排列组合) C++

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805430595731456题目大意一道有意思的数学题,给出一个数字n,给出所有小于等于这个数的数字中1的个数和。题目分析判断所有[1,n][1,n][1,n]的数字中1的个数,我们可以每位单独判断,计算每一位为1时有多少种情况,然后对所有情况进行求和。每一...

2019-09-03 11:24:17 244

原创 (* PAT Advanced)1026.Table Tennis (队列模拟,结构体排序) C++

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805472333250560Sample Input:920:52:00 10 008:00:00 20 008:02:00 30 020:51:00 10 008:10:00 5 008:12:00 10 120:50:00 10 008:01...

2019-09-02 21:56:22 204

原创 (PAT Advanced)1053.Path of Equal Weight (树的遍历) C++

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805424153280512Sample Input:20 9 2410 2 4 3 5 10 2 18 9 7 2 2 1 3 12 1 8 6 2 200 4 01 02 03 0402 1 0504 2 06 0703 3 11 12 1306...

2019-09-02 15:37:34 190

原创 (PAT Advanced) 1048.Find Coins (哈希映射,二分查找)

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805432256675840题目大意假设你有N个货币,面值从1到500不等,只允许使用其中的两枚货币,然后刚好达到付款要求,如果存在多组方案,输出其中一个货币最小的方案。如果没有符合要求的方案,输出No Solution。方法1(二分查找)先对输入的N个货币...

2019-09-01 17:13:19 216

原创 (PAT Advanced)1045.Favorite Color Stripe (最长子序列问题) C++

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805437411475456题目大意给出M中喜欢的颜色(有先后顺序),然后给出一串长度为L的颜色条,去掉其中不喜欢的颜色,然后求剩下序列的一个子序列,使得这个子序列得颜色顺序符合自己喜欢颜色得先后顺序,不一定所有喜欢得颜色都有,但是要保证长度尽可能地长。方法1...

2019-08-31 17:20:48 229

原创 (PTA Advanced)1044.Shopping in Mars (区间查找,二分查找)

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805439202443264Sample Input 1:16 153 2 1 5 4 6 8 7 16 10 15 11 9 12 14 13Sample Output 1:1-54-67-811-11Sample Input 2:5 132...

2019-08-31 15:34:49 268

原创 (PTA Advaced)1043.Is It a Binary Search Tree (二叉搜索树,树的遍历) C++

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805440976633856A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtr...

2019-08-30 21:49:50 267

原创 (PAT Advanced)1040.Longest Symmetric String (字符串+动态规划) C++

原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805446102073344Given a string, you are supposed to output the length of the longest symmetric sub-string. For example, given Is PAT&am...

2019-08-29 20:39:57 273

原创 动态规划——子序列问题汇总

文章目录1. 最大连续子序列和2.最长递增子序列1. 最大连续子序列和问题定义即求一个连续子序列,使的其和最大。例如对于序列{5,-3,4,2}来说,最大子序列为{5,-3,4,2},和为8。对于序列{5,-6,4,2},最大子序列为{4,2},和为6。因为是求 连续序列,所以我们以SiS_{i}Si​ 表示问题状态,代表以AiA_{i}Ai​ 结尾的子序列的最大和,则我们有下列动态规划...

2019-08-28 21:40:15 1313

原创 数据结构——线性表

文章目录1.线性表的定义1.1 线性结构1.2 线性结构的表示1.2.1 顺序表示1.2.2 链式表示2.线性表的实现2.1 常见的线性表操作2.2 线性表实现3. 线性表的应用——多项式1.线性表的定义1.1 线性结构线性结构有以下特点:只有一个 “首元素”;只有一个 “尾元素”;除了首元素外,其余元素只有一个 “直接前驱”;除了尾元素外,其余元素只有一个 “直接后继”;即结构...

2019-08-23 17:20:14 399

阻尼牛顿法求函数极小值

Matlab写的阻尼牛顿迭代法求函数极小值,有详细注释!

2018-10-27

Qt5开发示例教程

手把手教使用Qt进行C++图形用户界面开发,内容全面,边看边学边操作

2018-09-20

Qt简易计算器

用Qt写的计算器,参考了Qt的示例教程,功能比较简单,只能执行数字的+-*/

2018-09-20

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

TA关注的人

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