算法杂记
~
FlashCanSavetheWorld
不想起床
展开
-
根据树的前序中序写出后序或后序中序写出前序遍历
#include<bits/stdc++.h>//#define int long longusing namespace std;int back[]={5,2,6,4,1},mid[]={2,5,1,6,4},pre[]={1,2,5,4,6};//string back,mid;void getback(int l,int r,int root){//通过前序和中序得到后序 if(l>r)return; int i = l; while (i&l原创 2021-05-30 14:48:41 · 126 阅读 · 1 评论 -
归并排序
思想:递归分治#include<bits/stdc++.h>#define int long longusing namespace std;int arr[100];void _merge(int left,int right,int mid){ int *copy = new int [right-left+1]; for(int i =left;i<=right;i++){ copy[i-left]=arr[i]; // copy拷贝原创 2021-05-11 13:31:29 · 88 阅读 · 1 评论 -
区间dp
#include <iostream>using namespace std;const int N = 255;int w[N];int sum[N]={0};int dp[N][N];int inf = 0x7fffffff;int n;int Minval(){ int s[N][N]; for(int i =1;i<=n;i++) { dp[i][i]=0; s[i][i]=i; } f.原创 2020-08-05 20:28:57 · 83 阅读 · 0 评论 -
Dijkstra 邻接表+优先队列
#include<iostream>#include<vector>#include<queue>using namespace std;int dp[100005];typedef long long ll;const ll inf = ~0LLU >> 2;const int Num = 1e5+5;struct edge{ int from,to,w; edge(int a,int b,int c){from=.原创 2020-07-31 13:10:52 · 213 阅读 · 0 评论 -
并查集的优化
复杂度为lognint find(int x){ int r =x; while (father[r]!=r) { r=father[r]; } int i =x,j; while (i!=r) { j=father[i]; father[i]=r; i=j; } return r; }void union_b(int x ,int y){ x= find(x)原创 2020-07-29 10:25:43 · 78 阅读 · 0 评论 -
单调队列
单调队列就是维护队列的一种思想 其实单调队列就是维护一个队列,使得这个队列区间最大或区间最小。例题:博览馆正在展出由世上最佳的 M 位画家所画的图画。wangjy想到博览馆去看这几位大师的作品。可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字,a和b,代表他要看展览中的第 a 幅至第 b 幅画(包含 a 和 b)之间的所有图画,而门票的价钱就是一张图画一元。为了看到更多名师的画,wangjy希望入场后可以看到所有名师的图画(至少各一张)。可是他又想节省金钱。。。作为w原创 2020-07-15 18:06:48 · 220 阅读 · 0 评论 -
gcd
int gcd(int a,int b){ while(a^=b^=a^=b%=a); return b;}原创 2020-07-15 14:31:13 · 135 阅读 · 0 评论 -
大数取模及快速幂
链接:https://ac.nowcoder.com/acm/contest/3674/E来源:牛客网题目描述LYX is the most handsome boy in HNU who likes math very much. One day his girlfriend JY asked LYX a simple problem: “Today is Sunday , what day of week will it be after 400^600 days, and what about原创 2020-07-13 11:09:02 · 182 阅读 · 0 评论 -
是否完全二叉搜索树 (树节点插入)
将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。输入格式:输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。输出格式:将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出YES,如果该树是完全二叉树;否则输出NO。输入样例1:938 45 42 24 58 30 6原创 2020-05-13 10:57:27 · 600 阅读 · 0 评论 -
小顶堆及大顶堆的建立
首先明确堆是一个完全二叉树,小顶堆指根结点的值小于或等于左右子节点的值,大顶堆指根结点的值都大于或等于左右子节点的值关于大小顶堆的建立更详细的介绍#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<queue>#include...原创 2020-04-28 16:55:45 · 800 阅读 · 1 评论 -
玩转二叉树(根据前序和中序遍历建树和层次遍历)
https://blog.csdn.net/qq_37275680/article/details/88781968转载 2020-04-27 18:20:08 · 356 阅读 · 0 评论 -
PAT L3-008 喊山(图的链式存储+bfs)
喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤。呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的。原来它是彝族先民用来求援呼救的“讯号”,慢慢地人们在生活实践中发现了它的实用价值,便把它作为一种交流工具世代传袭使用。一个山头呼喊的声音可以被临近的山头同时听到。题目假设每个山头最多有两个能听到它的临近山头。给定任意...原创 2020-04-24 17:13:45 · 165 阅读 · 0 评论 -
算法提高 最大值路径(图的dp+dfs)
问题描述 刷微博,编程序。如下图所示,@北京发布 提出了如下“头脑震荡”问题。对此问题做一般化描述: 有n阶方阵,从矩阵的左下角元素为起点,从行或列(水平或垂直)两个方向上移动,直到右上角。求出有多少条路径可以使得经过的元素累加值最大,最大值是多少。 输入格式 共有n+1行。 第一行整数n,表示矩阵的阶数,2<=n<=10。 第二行起,每行n个整数,以空格分隔,...原创 2020-04-17 14:58:49 · 355 阅读 · 0 评论 -
Dijkstra算法
https://www.cnblogs.com/virusolf/p/4410267.html转载 2020-04-16 11:50:06 · 90 阅读 · 0 评论 -
最长滑雪道(dfs)
小袁非常喜欢滑雪, 因为滑雪很刺激。为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。 小袁想知道在某个区域中最长的一个滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。如下:一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-…-3-2-1更长。事实上...原创 2020-04-09 11:41:23 · 182 阅读 · 0 评论 -
贪吃的大嘴(动态规划)
问题描述: 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕,而且大嘴还特别懒,她希望通过吃数量最少的小蛋糕达到这个目的.所以她希望你能设计一个程序帮她决定要吃哪些小蛋糕.输入格式 先输入一行包含2个整数m、n,表示大嘴需要吃美味度和为m的小蛋糕,而小蛋糕一共有n种,下面输入n行,每行2个整数,第一个表示该种小蛋糕...原创 2020-04-03 12:17:28 · 700 阅读 · 0 评论 -
动态规划(0-1背包问题)
问题描述:有n种物品,每种只有一个。第i种物品的提及为 Vi,重量为Wi。选一些物品装到一个容量为c的背包,使得背包内物品中提及不超过c的前提下重量尽量大。例如:有一背包,最大体积是10,有三个物品,体积分别是3,4,5,重量分别是4,5,6,求在不超过背包体积的前提下,所放物品的最大重量是多少。显然:最大重量是11,选择的物品是2和3,其体积是9我们可以利用动态规划来解决这个问题,那么列...原创 2020-04-02 15:57:08 · 119 阅读 · 0 评论 -
动态规划与贪心算法比较
转载转载 2020-03-28 01:42:14 · 104 阅读 · 0 评论 -
Warshall算法求传递闭包
void Warshall(int n){ int i, j, k; for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) if (answers[j][i] == 1) for (k = 1; k <= n; k++) answers[j][k] = (answers[j][k] || answers[i][k]);...原创 2020-03-20 16:17:52 · 298 阅读 · 0 评论 -
c++STL find算法复杂度
转载于https://www.cnblogs.com/shangguanpengfei/p/10483347.html转载 2020-03-13 16:26:18 · 4948 阅读 · 0 评论 -
Floyd求两点间最短路径并输出最短路径条数
算法描述:从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大,这也是所谓的初始化工作;对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比己知的路径更短。如果是更新它。以下图为例,对Floyd 算法进行演示。图片转自https://blog.csdn.net/fengchi863/article/details/...原创 2020-02-19 11:34:44 · 2407 阅读 · 1 评论 -
26进制转换
L1-050 倒数第N个字符串 (15分)给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, …, aaz, aba, abb, …, abz, …, zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数...原创 2020-02-14 00:23:55 · 1537 阅读 · 0 评论 -
大数运算
大数运算#include "stdafx.h"#include<iostream>#include<string>#include<vector>#include<math.h>using namespace std;vector<int>heshu(1000, 0);//计算乘法时计算和的数组int heshu_L;v...原创 2020-02-11 11:59:49 · 152 阅读 · 0 评论 -
模拟手算除法
模拟手算除法这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输...转载 2020-02-07 14:01:59 · 508 阅读 · 0 评论 -
贪心算法
贪心算法贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。基本思想思想贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一...原创 2020-01-22 16:46:28 · 127 阅读 · 0 评论 -
二分查找与常用选择排序
#include “stdafx.h”#include <stdio.h>#include <stdlib.h>#define MAX 100/*设有一整型查找表,利用二分查找法查找指定的关键字。假设给出的查找表不确定是否排序,要求查找前,对查找表进行排序。【输入形式】输入若干组数据,每组数据包括:(1)输入整数n,表示查找表长度为n(n小于100...原创 2019-12-18 11:28:41 · 471 阅读 · 0 评论 -
并查集实现Kruskal算法
什么是并查集?并查集是一种树形结构,又叫“不相交集合”,保持了一组不相交的动态集合,每个集合通过一个代表来识别,代表即集合中的某个成员,通常选择根做这个代表。并查集的常用操作Make_Set(x):建立一个新的集合,其唯一成员就是x,因此这个集合的代表也是x,并查集要求各集合是不相交的,因此要求x没有在其他集合中出现过。Find_Set(x):通过递归的方式查找根节点,查找的目的在于判...原创 2019-12-17 18:11:35 · 1416 阅读 · 0 评论 -
dfs算法求联通块
// DFS求联通块.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<cstdio>#include<cstring>const int maxn = 100 + 5;char pic[maxn][maxn];int m, n, idx[maxn][maxn];void dfs(int r, int c...原创 2019-12-15 20:51:52 · 188 阅读 · 0 评论 -
图的深度优先和广度优先遍历
#图的深度优先和广度优先遍历在这里插入代码片#include<stdio.h>#define N 20#define TRUE 1#define FALSE 0int visited[N]; /访问标志数组/typedef struct /队列的定义/{int data[N];int front, rear;}SqQueue;/堆栈定义/typede...原创 2019-12-15 11:32:49 · 144 阅读 · 0 评论