![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法竞赛入门经典
文章平均质量分 67
麦片老板
Please show the code
展开
-
字符串算法:字典树trie
字典树trie 1. 原理 先看一张图 看不懂很正常 如果你看懂了,那么原理就可以直接跳过 比如说我们现在有几个字符串 in inn int to ten tea 我们想知道te是哪几个字符串的前缀? 这个时候我们显然可以一个一个去比较,但是这样的效率有点低,我们也可以想到用字符串hash去比较,但是这样的效率还是有点低 这个时候字典树就排上用场了 字典树 说白了 就是一个字典 和我们平时查英语的字典一样,比如我们现在要去查一个单词hello 我们首先第一个动作一定是放到 H 开头的那一页 再去放到原创 2021-07-10 22:32:33 · 164 阅读 · 0 评论 -
字符串hash
字符串hash 原理 我的理解是:这是一种很玄学的字符串匹配算法 比如我们现在有一个字符串:str = "abcde" 通过一个hash函数,我们假设为int mhash() [为什么要写成mhash?因为hash()在库函数已经有了] 那我们得到的str的哈希值str_hash = mhash(str) 接下来是mhash的实现代码:听说这种是比较不会发生冲突的了 typedef unsigned long long ull; // 因为hash值一般都很大,所以我们采用ull ull mhash(cha原创 2021-07-02 23:02:44 · 175 阅读 · 0 评论 -
字符串算法: AC自动机
AC自动机 AC自动机 = KMP + Trie 原理 如果你还没看过kmp和trie,那我建议你先去看一下,因为这样会比较容易理解 本文图片和灵感均来自https://blog.csdn.net/bestsort/article/details/82947639 我在学AC自动机时,是直接先看题的,这里有一道入门模板题,我们先来看一下 入门模板题 这道题的意思是说:给你多个模式串S ,然后再给你一个文本串T,让你在T中找有多少个不同的模式串出现过 比如: 模式串有4个:ash,shex,sha,bcd 文原创 2021-06-26 23:11:11 · 198 阅读 · 0 评论 -
uva12558
uva12558 思路 IDDFS+减枝 当1/x * (剩余的层数) < a/b 减枝continue 当1/x > a/b 减枝continue 当出现第一组答案时,如果x>ans[deep-1] ,此时已经不是最优解了,减枝continue 坑:能用bool的就不要用int 代码 #include <stdio.h> #include <string.h> typedef long long ll; const int maxk = 1010; ll a原创 2020-09-12 18:51:02 · 158 阅读 · 0 评论 -
uva690
uva690 题意 https://vjudge.net/problem/UVA-690 流水线执行程序 一共有五个工作单元,10个完全相同的程序需要被执行,每个程序至少需要n个时间段来执行 同一个工作单元不能同时执行两个程序 思路 二进制位运算+dfs+最优解减枝 具体看这张图 代码 // 用时130ms #include <iostream> #include <cstdio> #include <cstring> #define min(a,b) a<b?原创 2020-09-07 17:55:13 · 294 阅读 · 0 评论 -
uva211
uva211 题意:https://vjudge.net/problem/UVA-211 思路 每一个方块都只有两种方式,横着和竖着 如果到了可以换行的时候,上一行还没有摆满,则不通过,回溯 注意格式,特别麻烦 代码 #include <iostream> #include <cstdio> #include <cstring> using namespace std; int mp[10][10]; int ans[10][10]; bool vis[10][1原创 2020-09-04 13:55:25 · 214 阅读 · 0 评论 -
uva225
uva225 题意:https://vjudge.net/problem/UVA-225 思路 很显然的dfs+回溯,但是需要减枝,不然会TLE 减枝1:判断当前该点是否已经无法回到原点 减枝2:需要判断一步走完后的点是否已经访问过了(题意中没有说明白) 代码 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; const原创 2020-08-31 14:40:21 · 248 阅读 · 0 评论 -
uva1602
uva1602 题意 链接如下:https://vjudge.net/problem/UVA-1602 中文解释: 输入n,w,h(1<=n<=10,1<=w,h<=n).求能放在w*h网格里的不同的n连块的个数(平移,旋转,翻转算一种) 例如:第一排为n=5,w=2,h=4 第2牌为n=8,w=3,h=3 题解 很直接的思路:打表+STL(set) 重难点是 如何判断重复 因为可以平移,旋转,翻转,所以我们需要给每一个连通块一个标准化(让其的相对起始点都在(0,0))。 利用se原创 2020-08-27 10:39:39 · 260 阅读 · 0 评论 -
IDA* 与 A* 与uva1343
IDA* 和 A* 故事背景 练习紫书的过程中遇到了一个问题:uva1343 经过日日夜夜的思考,决定去学习一下IDA*扩充自己的知识库 本文参考了大佬的博客:A与IDA的奇妙之旅 原理 对IDA*我个人理解是:有方向的暴力搜索 【乍一想,有一点点人工智能的感觉哈哈哈】 很神奇,搜索的路径大概会是这样的,具体可以参考A与IDA的奇妙之旅 可以认为是,你在走一步之前多了个判断:判断走哪里会比较近,先从近的走 ,这样就可以减少搜索的次数 有个函数是这样的 F(x)=G(x)+H(x) F(x)=G(x)+H(x原创 2020-08-26 14:29:30 · 165 阅读 · 0 评论