自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Jerry Lee の blog

欢迎浏览,交流。邮箱:[email protected]

  • 博客(55)
  • 资源 (1)
  • 收藏
  • 关注

原创 后序、中序得前序、层序

后序、中序得前序、层序输入72 3 1 5 7 6 41 2 3 4 5 6 7输出4 1 6 3 5 7 2两种方法:1.第一种编程较为复杂,但是思路清晰,而且通用。 建树+BFS#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <queue>using

2017-11-26 22:30:58 272

原创 倒水问题详解

倒水问题详解倒水问题的经典形式是这样的:  “假设有一个池塘,里面有无穷多的水。现有2个空水壶,容积分别为5升和6升。问题是如何只用这2个水壶从池塘里取得3升的水。”  当然题外是有一些合理的限制的,比如从池塘里灌水的时候,不管壶里是不是已经有水了,壶一定要灌满,不能和另一个壶里的水位比照一下“毛估估”(我们可以假设壶是不透明的,而且形状也不同);同样的,如果要把水从壶里倒进池塘里,一定要都倒光;如

2017-11-26 14:58:24 3141 1

原创 经典DFS PAT 1103

经典DFS PAT 1103题意给定正整数N、K、P,将N表示成K个整数,(可以相同,递减排列)的P次方的和,就是N=n1^P...nk^P。如果有多种方案,那么选择底数和n1+n2...+nk最大的方案;如果还有多种方案,那么选择底数序列的字典序最大的方案。思路步骤1:由于P不小于2,并且在单次运行中是固定的,因此不妨开一个vector<int> fac,在输入P之后就预处理出所有不超过N的

2017-11-26 10:50:02 541

原创 PAT 1074

PAT 1074输入00100 6 400000 4 9999900100 1 1230968237 6 -133218 3 0000099999 5 6823712309 2 33218输出00000 4 3321833218 3 1230912309 2 0010000100 1 9999999999 5 6823768237 6 -1#include <cstdio>

2017-11-25 22:35:21 269

原创 排列题应试技巧

排列题应试技巧想要求一个序列的全排列,有几种方法,一种是可以查看数论中的排列方法,递归式的。 另一种可以使用下面的取巧式的应试方法。都知道#include <algorithm>其中,上面的头文件中有//判断一个序列是否是另一个序列的一种排序is_permutation()//返回给定范围中的元素组成的下一个按字典序的排列next_permutation()//返回给定范围中的元素组成的上

2017-11-25 16:43:36 209

原创 PAT 1051

PAT 1051输入5 7 51 2 3 4 5 6 73 2 1 7 5 6 47 6 5 4 3 2 15 6 4 3 7 2 11 7 6 5 4 3 2输出YESNONOYESNO#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#include <vector>#i

2017-11-25 09:41:38 303

原创 PAT 1039

PAT 1039输入11 54 7BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE11 4ANN0 BOB5 JAY9 LOR62 7ANN0 BOB5 FRA8 JAY9 JOE4 KAT3 LOR63 1BOB55 9AMY7 ANN0 BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1ZOE1 ANN0 BOB5 JOE4 JAY9 F

2017-11-24 15:31:24 248

原创 PAT 1023

PAT 1023输入1234567899输出Yes2469135798#include <cstdio>#include <iostream>#include <cstdlib>#include <algorithm>#include <vector>#include <cmath>#include <string>#include <cstring>using namespac

2017-11-24 14:54:55 204

原创 快速建立素数表

快速建立素数表比如建立50000以内的素数表#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#include <vector>using namespace std;vector<int> prime(500000,1);int main(){ for(int i=2;i*i<500

2017-11-24 09:52:42 1525

原创 PAT 1096

PAT 1096#include <cstdio>#include <iostream>#include <cmath>#include <algorithm>#include <string>#include <cstring>using namespace std;int main(){ long long n; scanf("%lld",&n); int an

2017-11-24 08:31:09 216

原创 大数除法

大数除法除法步骤: 上一步的余数乘以10加上该步的位,得到该步临时的被除数,将其与除数比较:如果不够除,则该位的商为0;如果够除,则商就是对应的商,余数就是对应的余数。最后一步要注意最后高位可能有多余的0,要去除他们,但也要保证结果至少有一位数。//高精度除法,r为余数bign div(bign a,int b,int& r) { bign c; //被除数的每一位和商的每一位

2017-11-23 20:59:42 771

原创 大数乘法

大数乘法乘法步骤: 取bign 的某一位与int型整数相乘,再与进位相加,所得结果的个位数作为该位的结果,高位部分作为新的进位。乘法部分程序://高精度乘法bign mul(bign a,int b) { bign c; //进位 int carry=0; for(int i=0;i<a.len;i++) { int temp=a.d[

2017-11-23 20:48:57 567 1

原创 大数减法

大数减法减法步骤: 对某一步,比如a-b,比较被减位和减位,如果不够减,就让被减数的高位减1,被减数+10,再进行减位;如果够减,就直接减。 最后一步要注意减法后高位可能有多余的0,要去除他们,还要保证结果至少有一位数。减法部分程序://高精度a-bbign sub(bign a,bign b) { bign c; //以较长的为界限 for(int i=0

2017-11-23 20:38:26 235

原创 大整数的加法

大整数的加法加法的步骤: 将该位上的两个数字与进位相加,得到的结果取个位数作为该位结果,取十位数作为新的进位。加法部分程序://高精度a+b bign add(bign a,bign b){ bign c; //carry是进位 int carry=0; //以较长的作为界限 for(int i=0;i<a.len|| i<b.len ;i++)

2017-11-23 20:28:37 293

原创 大整数的存储

大整数的存储定义int型数组d[1000],整数的高位存储在数组的高位,整数的低位存储在数组的低位。 而把整数按字符串读入的时候,实际上是逆序存储的 。因此在读入之后需要另存到d[]数组的时候需要反转一下。定义大数 数据类型 bign:struct bign{ int d[1000]; int len; bign() { fill(d,d+1000,

2017-11-23 19:20:50 881

原创 PAT 1069

PAT 1069技巧题#include <cstdio>#include <iostream>#include <cmath>#include <algorithm>#include <string>using namespace std;bool cmp(char a,char b){ return a>b;}int main(){ string s; cin>>s

2017-11-23 10:48:15 256

原创 LIS--最长不下降子序列

LIS–最长不下降子序列输入81 2 3 -9 3 9 0 11输出6#include <cstdio>#include <algorithm>using namespace std;const int N=100;int A[N],dp[N];int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) {

2017-11-20 13:45:04 188

原创 数塔问题

数塔问题输入558 312 7 164 10 11 69 5 3 9 4输出44//数塔问题,dp的递推形式//状态和状态转移方程,//分为边界,开始的地方就是边界#include <cstdio> #include <iostream>#include <algorithm>using namespace std;const int MAXN=1000;int f[M

2017-11-20 10:32:43 342

原创 带记忆化搜索的斐波那契数列

带记忆化搜索的斐波那契数列//通过dp数组保留部分结果,动态规划避免大量重复性操作#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int MAXN=100;int dp[MAXN];int fabnaci(int n){ if(n==1 || n==2) {

2017-11-20 08:46:09 2396

原创 最小生成树--kruskal

最小生成树–kruskal也加克鲁斯卡尔算法。kruskal算法的思想简单说来就是:每次选择图中最小边权的边,如果边两端的顶点在不同的连通块中,就把这条边加入最小生成树中。如果是稠密图(边多),用prim算法;如果是稀疏图(边少),用kruskal算法,或者用我自己想的“做减法”。//对于kruskal算法来说,由于需要判断边的两个端点//是否在不同的连通块中,因此边的两个端点的编号是一定//

2017-11-19 22:24:32 170

原创 最小生成树--prim算法

最小生成树–prim算法首先说明,Dijkstra算法和prim算法实际上是相同的思路,只不过是数组d[]的含义不同。详见 算法笔记 P404 prim算法的基本思想是对图G设置集合S(就是个巨型防护罩),用来存放已经被访问的顶点(就是被攻占的城市),然后执行n次下面的两个步骤:1.每次从集合V-S(就是未被攻占的城市)中选择与集合S(巨型防护罩)最近的一个顶点(记为u),访问(即攻占)u并将

2017-11-19 20:13:39 292

原创 最小生成树的胡思乱想--做减法

最小生成树的胡思乱想–做减法今天看到最小生成树的算法 忽然想到 为什么现在的做法都是在 做加法呢? 为什么不尝试一下减法呢? 比如说我们的顶点数n,边数m n和m相差不多。 如果我们做加法的话要做 n-1条,假如说n比较大 但是我们如果**做减法, 应该只需要 ( m-(n-1) )条**, 因为前提已经有 (m-n)是一个很小的可以接受的数了, 所以

2017-11-19 17:33:11 241

原创 全源最短路问题--Floyd算法

全源最短路问题–Floyd算法Floyd算法,也就是弗洛伊德算法,用来解决全源最短路问题。就是对给定的图G,求任意两点u,v之间的最短路径长度,时间复杂度为O(n^3)。由于n^3的复杂度决定了顶点数n的限制约在200以内,因此使用邻接矩阵来实现Floyd算法是非常合适且方便的。Floyd算法基于一个事实: 如果存在顶点k,使得以k作为中介点时,顶点i和顶点j的当前最短距离缩短,则使用顶点k作为顶

2017-11-19 10:22:52 1284

原创 PAT1030

输入4 5 0 30 1 1 201 3 2 300 3 4 100 2 2 202 3 1 20输出0 2 3 3 40程序#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;//最大顶点数 const int MAXV=510;const

2017-11-19 08:54:37 334

原创 Dijkstra算法第二套模板程序

Dijkstra算法第二套模板程序//Dijkstra算法第二套模板程序//分两大步骤//1.使用Dijkstra算法记录所有最短路径//通俗的说,就是第一步只筛选 第一标尺 满足条件的情况,也就是最短路径。 //程序具体实现,固定化,不需要修改vector<int> pre[MAXV];void Dijkstra(int s) { fill(d,d+MAXV,INF);

2017-11-18 21:57:18 213

原创 最短路径变型题解法举例

最短路径变型题解法举例PAT A 1003输入5 6 0 21 2 1 5 30 1 10 2 20 3 11 2 12 4 13 4 1输出2 4//最短路径变型题解法举例//PAT A 1003#include <cstdio>#include <cstring>#include <algorithm>using namespace std;//最大顶点数 const

2017-11-18 19:33:46 280

原创 Dijkstra算法--变型题的求解

Dijkstra算法–变型题的求解//Dijkstra算法用来求最短距离 已经实现了//做题题型有变化,需要处理升级版/*//碰到有两条及以上可以达到最短距离的路径,题目就会给出第二标尺 //第一标尺是距离,要求在所有最短路径中选择第二标尺最优的一条路径。//// 第二标尺常见的有下面3种出题方法或组合// 1.给每条边再增加一个边权(比如花费),然后要求在最短路径有//

2017-11-18 17:39:37 428

原创 Dijkstra算法求最短路径

Dijkstra算法求最短路径//Dijkstra算法用来求最短距离 已经实现了//那么最短路径 如何求解并打印出来呢?//此处的方法是记录路径中结点的前驱if(v未被访问 && 以u为中介点可以使起点s到顶点v的最短距离d[v]更优 ) { 优化d[v]; 令v的前驱为u; } //程序具体实现,邻接矩阵版//n为顶点数,MAXV为最大顶点数int n,G[MAXV

2017-11-18 16:03:31 1154

原创 Dijkstra算法应用小例子

Dijkstra算法应用小例子输入6 8 00 1 10 3 40 4 41 3 22 5 13 2 23 4 34 5 3输出0 1 5 3 4 6编程//Dijkstra算法应用小例子//算法笔记 P368 亚历山大#include <cstdio>#include <algorithm>using namespace std;//最大顶点数 const int MA

2017-11-18 15:15:03 2813 1

原创 单源最短路径问题--Dijkstra

单源最短路径问题–Dijkstra首先,Dijkstra算法解决的是单源最短路问题,即给定图G(V,E)和起点s(起点又称为源点),求起点s到达其他顶点的最短距离。注意 Dijkstra算法只能应对所有边权都是非负数的情况,如果边权出现负数,那么迪杰斯特拉算法很可能会出错,这时最好使用SPFA算法。Dijkstra算法的策略是:设置集合S存放已被访问的顶点(即已攻占的城市),然后执行n次下面的

2017-11-18 13:21:09 465

原创 图的遍历程序模板–BFS

图的遍历程序模板–BFS//图的遍历:DFS 和 BFS//BFS 伪代码模板//遍历u所在的连通块BFS(u) { //定义队列q queue q; 将u入队; //设置u已被加入过队列 inq[u] = true; while(q非空) { 取出队首元素u进行访问; //枚举从u能直接到达的顶点v

2017-11-17 21:26:44 486

原创 图的遍历程序模板--DFS

图的遍历程序模板–DFS//图的遍历:DFS 和 BFS//DFS 伪代码模板//访问顶点u DFS(u){ vis[u]=true; //设置u已被访问 //访问从u出发可以到达的所有顶点v for(从u出发能到达的所有顶点v) { //如果v未被访问 if( vis[v] == false )

2017-11-17 20:06:37 770

原创

堆//堆的定义及基本操作/*//堆是一颗完全二叉树 //堆一般用优先队列实现,优先队列默认实现大顶堆 //对于完全二叉树,比较简洁的实现方法是 //使用数组来是实现存储完全二叉树。 //这样结点就会按层序存储于数组中, //其中第一个结点将存储于数组中的1号位 //数组i号位表示的结点的左孩子就是2i 号位// 右孩子就是(2i+1)号位。

2017-11-17 16:12:35 230

原创 AVL--平衡二叉树的一些操作,杂记

AVL–平衡二叉树的一些操作,杂记//AVL--平衡二叉树的一些操作,杂记//平衡二叉树的定义//首先,AVL树仍然是一颗二叉查找树//AVL树的数据结构struct node{ int v,height; //v为结点权值,height为当前子树高度 node *lchild,*rchild; }; //新建一个结点//生成一个新结点,v为结点权值 nod

2017-11-17 13:59:03 211

原创 遍历二叉搜索树习题

遍历二叉搜索树习题 PAT A1043输入178 6 5 7 10 8 11输出1YES5 7 6 8 11 10 8输入278 10 11 8 6 7 5输出2YES11 8 10 7 5 6 8输入378 6 8 5 10 9 11输出3NO#include <iostream>#include <cstdio>#include <cstdlib>#include

2017-11-17 10:09:11 587

原创 二叉查找树/二叉排序树/二叉搜索树----> BST

二叉查找树/二叉排序树/二叉搜索树—-> BST 基本操作:查找、插入、建树、删除。//二叉查找树/二叉排序树/二叉搜索树----> BST //基本操作:查找、插入、建树、删除。//search 函数查找二叉查找树中数据域为x的结点void search(node* root,int x){ if(root == NULL) { printf("searc

2017-11-17 09:20:12 1422

原创 普通树的一些操作,杂记

普通树的一些操作,杂记//树的数据结构,静态实现 struct Node{ typename data; //数据域 vector child; //指针域,存放所有子结点的下标 }node[maxn]; //结点数组,maxn为结点上限个数//新建一个树结点,但是,一般考试中设计树(非二叉树)的考查时,//一般都给出了结点的编号,我们

2017-11-16 22:34:48 222

原创 二叉树遍历

二叉树遍历习题题意:给出一个二叉树的后序遍历序列和中序遍历序列,求这颗二叉树的层序遍历序列。输入72 3 1 5 7 6 41 2 3 4 5 6 7输出4 1 6 3 5 7 2#include <iostream>#include <cstring>#include <queue>#include <algorithm>using namespace std;const int

2017-11-16 21:14:00 225

原创 树的一些操作,杂记

树的一些操作,杂记//新建结点数据类型 typedef struct{ typename data; node* lchild; node* rchild;}Node;//新建树结点 Node* new_node(int v){ Node* node=new Node; node->data=v; node->lchild=node->rchild

2017-11-16 21:01:24 189

原创 起点 S到终点T的步数

起点 S到终点T的步数输入:5 5......*.*..*S*..***....T*2 2 4 3输出11#include <iostream>#include <cstdio>#include <cstdlib>#include <queue>#include <cstring>using namespace std;const int maxn=100;typedef

2017-11-16 16:08:02 524

电子类工具小集合

电子类工具小集合

2017-08-11

空空如也

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

TA关注的人

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