算法竞赛入门经典
文章平均质量分 67
麦片老板
Please show the code
展开
-
字符串算法:字典树trie
字典树trie1. 原理先看一张图看不懂很正常如果你看懂了,那么原理就可以直接跳过比如说我们现在有几个字符串ininninttotentea我们想知道te是哪几个字符串的前缀?这个时候我们显然可以一个一个去比较,但是这样的效率有点低,我们也可以想到用字符串hash去比较,但是这样的效率还是有点低这个时候字典树就排上用场了字典树 说白了 就是一个字典和我们平时查英语的字典一样,比如我们现在要去查一个单词hello我们首先第一个动作一定是放到 H 开头的那一页再去放到原创 2021-07-10 22:32:33 · 153 阅读 · 0 评论 -
字符串hash
字符串hash原理我的理解是:这是一种很玄学的字符串匹配算法比如我们现在有一个字符串:str = "abcde"通过一个hash函数,我们假设为int mhash() [为什么要写成mhash?因为hash()在库函数已经有了]那我们得到的str的哈希值str_hash = mhash(str)接下来是mhash的实现代码:听说这种是比较不会发生冲突的了typedef unsigned long long ull; // 因为hash值一般都很大,所以我们采用ullull mhash(cha原创 2021-07-02 23:02:44 · 141 阅读 · 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 · 155 阅读 · 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 · 123 阅读 · 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 · 265 阅读 · 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 · 188 阅读 · 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 · 213 阅读 · 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 · 222 阅读 · 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 · 132 阅读 · 0 评论