自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 差分定义及基础性质

在做洛谷P2367语文成绩这道题的时候,发现用的就是一些差分的基础知识,于是乎就心血来潮写下了这篇文章一、什么是差分差分,先从这个词的构成角度来看,应该是与两数之差以及分块思想有关。让我们先给定一个简单数列:arr[1] = 1;arr[2] = 2;arr[3] = 4;那我们的差分是怎么定义的呢,且看://d数组记录的就是差分d[1] = arr[1] = 1;d[2] = arr[2] - arr[1] = 1;d[3] = arr[3] - arr[2] = 2;d[4]

2020-06-06 21:39:49 4408

原创 【树形结构专题】二叉搜索树

二、二叉搜索树BST二叉搜索树,也叫二叉排序树,在二叉树的基础上做了如下改动:要么为空树,要么满足下面这个条件任何结点的左子树结点权值都要小于或等于该节点权值,任何结点的右子树结点权值都要大于该节点权值。1.BST每个节点的存储结构和初始化与二叉树相同:struct Node { int val; //存储的值 Node* left; Node* right; //分别代表左孩子和右孩子};Node* root = NULL; //根节点为空Node* newNode(int x

2020-05-19 22:13:23 159

原创 【树形结构专题】二叉树

一、二叉树二叉树,顾名思义,就是每个节点都有两个分支,最后构成的树形结构。1.先看一下二叉树每个节点的存储结构:struct Node { int val; //存储的值 Node* left; Node* right; //分别代表左孩子和右孩子};Node* root = NULL; //根节点为空2.再看一下如何创建一个新的节点:Node* newNode(int x) { Node* node = new Node(); node->val = x; node-&g

2020-05-19 20:58:03 308

原创 P1037 产生数

P1037DFS+高精度乘低精度一道简单题,对每一位数字进行dfs,看最多能变换几次,最后利用乘法原理相乘就是结果话不多说,直接干代码:#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#include <cmath>#include <cctype>#include <cstring>#include <string>#include <sstream>#inclu

2020-05-19 17:22:48 265

原创 洛谷P1036 选数

P1036DFS+素数判断一道简单的dfs题,数据规模也不大,可以直接用普通版素数判断法。注意dfs去重时采取升序的方法。话不多说,直接干代码:#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#include <cmath>#include <cctype>#include <cstring>#include <string>#include <sstream>#

2020-05-19 16:34:48 212

原创 筛选质数

首先,先简单介绍一下质数。如果一个数能被除1和其本身以外的数整除,那它就是合数,否则就是质数。1 既不是质数也不是合数。接下来,介绍三种筛选质数的方法。一、普通筛选法最简单的筛选方法,直接通过定义然后枚举写出代码//普通bool isPrime(int x) { if (x <= 1) return false; int sqr = (int)(x * 1.0); for (int i = 2; i <= sqr; i++) if (x % i == 0) return

2020-05-19 15:59:12 983

原创 P1030 求先序排列

P1030树形结构里的经典题,也是必备的入门题首先,放上一个结论,如若想唯一确定一个树,必须得至少已知它的中序遍历,否则不管你哪怕知道前序、后序、层序遍历,也无法唯一确定一个树。一、已知先序中序求后序第一步,先序遍历第一个位置肯定是根节点,然后在中序遍历中确定该根结点的位置第二步,确定好位置后,即可分别对左子树和右子树进行递归具体左子树和右子树的一个范围下标在图中已经很明显了,就不再做多余解释。直接干代码:void post_order(int x, int y, int p, int q

2020-05-19 14:47:46 250

原创 P1028 数的计算

P1028记忆化dfs或递推首先,此题如若用普通的递归,肯定是过不了所有点的。所以要么用记忆化要么用递推。先来一壶记忆化的代码,实现不难:#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#include <cctype>#include <string>#include <sstream>#include <stack>#include <set>#include

2020-05-19 14:18:52 101

原创 P1010 幂次方

P1010很久以前写的一道题,一道简单的模拟题或者是数学题?一看题面,很明显能想到用二进制的思想比如:13用二进制表示就是1101,也即13= 2^0 + 2^2 + 2^3所以此题就是相当于在找二进制数中1的位置下标怎么找?用移位运算右移位: 二进制数往右移一位,相当于此数除以2,对应的还有左移位                如 1

2020-05-19 13:30:15 143

原创 P1009 阶乘之和

P1009高精度+阶乘很久以前刚开始搞算法写的一道题,不难,可作为新手题。那时码风还有点奇怪~思路: 用arr数组,从1开始,存储每次乘一个数(高精度乘低精度)的结果 (即为当前数的阶乘),然后每乘完一次就进行一次加法(高精度加高精度),结果存储在ans数组中,最后逆序输出即可。注意代码中细节!话不多说,干代码:#include <cctype>#include <string>#include <stack>#include <set>#

2020-05-19 13:07:07 185

原创 洛谷P1004 方格取数

洛谷P1004一道显而易见的dp题,因为要走两次,相当于两个人一起从起点出发,所以可采取四维数组存储,前两维记录第一个人,后两维记录第二个人。转移方程:dp[i][j][k][m] = max(dp[i - 1][j][k - 1][m], max(dp[i - 1][j][k][m - 1], max(dp[i][j - 1][k - 1][m], dp[i][j - 1][k][m - 1])));看着挺长的,其实并不难理解,一个人有两种走路状态,两个人就有四种。注意一点: 当i == k &

2020-05-19 12:38:54 157

原创 洛谷P1002 过河卒

洛谷P1002一道入门dp题第一次看到这种题,可能第一时间想到的就是搜索,发现只能过几个点,然后想到既然题中提到了求路径条数,且数据将会很大,所以自然应想到dp才是正解。dp策略:1.记当卒走到地图上(i,j)点时,路径条数为f[i][j]2.因为卒只能往下或者往右走,不难得出转移方程:      f[i][j] = max(f[i][j],f[i-1][j] + f[i][j-1])3.用两次for循环遍历途中每个点,更新f[i][

2020-05-19 12:24:18 219

空空如也

空空如也

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

TA关注的人

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