![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
study
waterboy_cj
这个作者很懒,什么都没留下…
展开
-
DAG上的动态规划------硬币问题
https://blog.csdn.net/waterboy_cj/article/details/81103479问题描述:有n种硬币,面值分别为v1,v2,v3...vn,每种硬币有无限多,给定非负整数s,可以选用多少个硬币,使得面值之和恰好为s?输出硬币数目的最小值和最大值,并且输出各自的选取方案(如果有多种方案,则输出硬币编号字典序较小的方案,输出每种选取方案的面值)。 【...转载 2018-07-18 19:52:10 · 555 阅读 · 0 评论 -
红黑树(B数)学习
B数的存在,是为了解决内存和外存(磁盘)因读写速度不同导致的效率低下的问题,所以B数的建立能有效降低重复读写硬盘的问题。学习前,要先了解2-3树、2-3-4树的概念以及建立、删除的操作方法。https://blog.csdn.net/sun_tttt/article/details/65445754#include "stdio.h" #include "stdlib.h" ...原创 2018-08-05 14:39:39 · 174 阅读 · 0 评论 -
初识标准库bitset类型
对于要处理二进制位的有序集,每个位可能包含0或1值,我们可以用C++标准库中的bitset类型。该类型的声明与vector等基本相同,不同的是vector定义时是存放的数据类型,而bitset存放的是大小,例如:bitset<32> bitvec;//32 bits,all zero对其初始化有以下几种方法:1.bitset<n> b; //b有n位...原创 2018-08-06 13:55:15 · 130 阅读 · 0 评论 -
前缀和
所谓前缀和,可以简单归纳成一条公式,即ans[ i ] = ans[ i - 1 ] + a[ i ];如何理解,看例题: Description已知两个正整数a和b,求在a与b之间(包含a和b)的所有整数的十进制表示中1出现的次数。Input多组数据(不超过100000组),每组数据2个整数a,b.(1≤a,b≤1000000).Output每组数据的答案占一行。...原创 2018-08-02 14:03:38 · 608 阅读 · 0 评论 -
Trie字典树
#include <bits/stdc++.h>using namespace std;const int N = 1000;//N个串const int Z = 27;//字符集大小(此处以26个小写英文字母为例)int ch[N][Z], ans;//ch表示字典树,ans表示总节点数bool bo[N];//第几个节点是否是实际字符串集合中的元素bool inse...原创 2018-08-02 14:09:28 · 129 阅读 · 0 评论 -
AC自动机
AC自动机的算法来自贝尔实验室,它是一种解决多模式串匹配问题的算法。如:给出n个单词T,再给出一段包含m个字符串的文章,问有多少个单词在文章里出现?它结合了KMP算法和Trie字典树算法。所以学习AC自动机前要先学习KMP和Trie。 提供一些学习资料:https://www.bilibili.com/video/av2975983/?p=37【KMP算法学习视频】Trid字典...原创 2018-08-07 18:07:01 · 138 阅读 · 0 评论 -
RMQ问题与ST算法
对于问题(RMQ,Random Maximum Query):给你一串固定、不修改的数字,询问多次某个区间内的最大值或者最小值。用朴素的想法,依次遍历得到答案,时间复杂度为O(n),但是对于多次询问,如1E6次询问,这样的算法就不是最优的了。所以出现了ST算法。ST算法的原理是动态规划,通过O(logn)的预处理dp数组,得到O(1)的询问。1.预处理假设dp[i,j]表示从a[i...原创 2018-08-08 15:50:15 · 363 阅读 · 0 评论 -
整数快速幂
问题引入:我们经常要计算一个整数的幂,如,现在要求计算a^8是多少。若按寻常想法肯定是循环7次得a*a*a*a*a*a*a*a。但这样太慢了,所以我们可以这样想(a*a)*(a*a)*(a*a)*(a*a),这样只用算a*a一次,和3次(a*a)*(a*a),一共四次。这样比7次就减少3次运算了,当多次计算幂时,算法效率就比较高了。如何实现呢?这时候可以用二进制来计算:例如a^19...原创 2018-08-13 13:04:39 · 213 阅读 · 0 评论 -
ZCMU-1184 帮我求算一下斐波那契数吧(矩阵快速幂+应用)
1184: 帮我求算一下斐波那契数吧Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 261 Solved: 57[Submit][Status][Web Board]DescriptionAYY小朋友对斐波那契数非常感兴趣,他知道f[1]=1,f[2]=1,并且从第三个斐波那契数开始f[n]=f[n-2]+f[n-1](n>=3...原创 2018-08-13 13:17:07 · 355 阅读 · 0 评论 -
线段树——区间和
#include <bits/stdc++.h>using namespace std;inline int read(){ char ch; while ((ch = getchar()) < '0'&&ch > '9'); int res = ch - 48; while ((ch = getchar()) >= '0'&&...原创 2018-08-09 10:41:55 · 1188 阅读 · 0 评论 -
线段树——求区间最大最小值
//问最小值//Q a b 询问(a,b)中最小值//C a b 将a点值改为b#include <bits/stdc++.h>using namespace std;#define maxn 200005int min(int a, int b){ return a>b ? b : a;}int tree[4 * maxn];void pushup(...原创 2018-08-09 10:35:31 · 8142 阅读 · 1 评论 -
树状数组初步
来源https://blog.csdn.net/int64ago/article/details/7429868指南:最重要的是懂得需要维护的数组是怎么工作的,尤其是弄懂二进制算法lowbit(k),不得不说太精妙了。 一、树状数组是干什么的? 平常我们会遇到一些对数组进行维护查询的操作,比较常见的如,修改某点的值、求某个区间的和,而这两种恰恰是树状数组的强项!当然,数...转载 2018-07-30 18:10:42 · 90 阅读 · 0 评论 -
并查集学习
hdu1232问题:首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。像畅通工程这题,问还需要修几条路,实质就是求有几个连通分支。如果是1个连通分支,说明整幅图上的点都连起来了,不用再修路了;如果是2个连通分支,则...原创 2018-07-13 10:36:48 · 93 阅读 · 0 评论 -
ZCMU01934: ly的二叉树(卡特兰数)
1934: ly的二叉树Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 52 Solved: 16[Submit][Status][Web Board]Description某一天,ly正在上数据结构课。老师在讲台上面讲着二叉树,ly在下面发着呆。突然ly想到一个问题:对于一棵n个无编号节点的有根二叉树,有多少种形态呐?你能告诉她吗...原创 2018-07-24 18:03:12 · 309 阅读 · 0 评论 -
乘法逆元的计算方法
利用费马小定理如果p为质数,gcd(a,p)=1,那么a^(p-1) ≡1 (mod p) 则a^(p-2) ≡1/a (mod p) a^(p-2) ≡ inv(a) (mod p) inv(a) = a^(p-2) (mod p) 其中时间复杂度为O(logn)注意:模数 mod必须为质数才可以利用费马小定理求解typedef long long ll;ll quick...原创 2018-07-24 19:04:51 · 3566 阅读 · 0 评论 -
欧几里得算法 && 扩展欧几里得
欧几里得算法(辗转相除法求最大公因数):仅供自己记忆,如需学习请前往:欧几里得求gcd图示、欧几里得算法推导int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}扩展欧几里得:同理:扩展欧几里得学习void Ex_gcd(int a, int b, int &x, int &y){ if(b =...原创 2018-07-24 19:26:50 · 102 阅读 · 0 评论 -
平衡二叉树的建立(AVL树)
平衡二叉树的建立,在二叉树搜索中具有重要意义,所以今天来记录一下AVL树的建立。#include <bits/stdc++.h>using namespace std;#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 100typedef struct BiTNode...原创 2018-07-28 18:16:39 · 1075 阅读 · 0 评论 -
KMP算法
#include <bits/stdc++.h>using namespace std;void get_next(char T[], int *next){ int i = 1, j = 0; next[1] = 0; while (i < T[0])//T[0]存放的是该字符串的长度,具体字符从T[1]开始 { if (j == 0 || T[i] == ...原创 2018-07-26 10:55:12 · 105 阅读 · 0 评论 -
KMP字符串模式匹配算法
对问题:在主串中找到子串,若找到,则返回子串首在主串中的下标 ,否则返回-1算法核心思想是,主串中下标 i 不回溯,求得子串的next数组(作用就是,如果到了这个位置不匹配了,那接下来子串下标 j 该回溯到哪里),然后开始对下标为 i 的主串和下标为 j 的子串逐个匹配,遇到不匹配时,找next数组中 next[j]存放的下标,将 j 回溯到此。PS:其实返回0也可以,因为S[0]、T[0...原创 2018-07-21 10:35:39 · 171 阅读 · 0 评论 -
01背包+完全背包+多重背包
问题:一、01背包:给你n种不同的物品,每个物品有自己的重量weight[i],和价值value[i],如果每个物品只有一个,给你容量为V的背包,怎样才能取得最大价值?-------------------------------------------------------------------分割线------------------------------------------...原创 2018-07-22 10:43:55 · 144 阅读 · 0 评论 -
再学习KMP算法——next数组、nextval数组
对于看毛片算法(KMP)其实我觉得对简单匹配效率提升不多= = 只有在模式串和主串之间存在很多“部分匹配”的时候,才显得比BF算法(最直观的匹配算法,一个一个匹配)效率高。但是KMP对指示主串的指针不必回溯,整个匹配过程对主串只用扫描一次,这对处理从外设输入的庞大文件很有效,可以边读入边匹配,无需重头读,效率很高。 PS:不懂KMP算法基本过程的可以先读一下我的另一篇博客 KMP算法。...原创 2019-01-03 11:09:14 · 693 阅读 · 0 评论