02 2022 档案
摘要:一、模拟退火 模拟物理的金属退火,使某一个状态慢慢趋于稳定,与爬山算法相类似的一类求解近似解的问题。 二、算法里的公式 若迭代出的解一定优于当前解,则当前解被覆盖。而当迭代的解不优于当前解得时候,我们用一个概率去接受它。 e^df/kT k为常数,编程中常常设置为1 T为温度 e为指数函数 df为负
阅读全文
摘要:一、Bellman-Ford算法 1.定义 Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径,它和Dijkstra的不同点是,它能计算带有负权边的最短路,而Dijkstra不能计算,而且它能判断负环的出现。 2.实现 先看张图(小圈为边的编号) 我要从1到5 1.首先初始化dis
阅读全文
摘要:一、Tarjan算法 与其说Tarjan是一种算法,不如说Tarjan是一种思想,利用这种思想我们可以求强联通分量(scc)、割点/边、缩点等问题,接下来我们就来说一下Tarjan是怎么解决以下几个问题的。 二、SCC 1.什么叫SCC? 定义就是在一个图中,如果任意两个点能够互相达到,那么就称几个
阅读全文
摘要:一、题目描述 二、解题思路 这个题主要注意一下会输入重复的边,你在存图时取个最小边权就行了 三、代码实现 1 #include "bits/stdc++.h" 2 const int inf = 1e9 + 10; 3 using namespace std; 4 int graph[5010][5
阅读全文
摘要:一、题目描述 二、解题思路 首先把这些点的距离预处理出来,然后把给定的边的权值设置为0。那么这些给定的边一定会被走到,然后根据短的再进行选就行了,因此可以用prim算法来做这个题,当然可以用堆优化,但是数据量比较小,所以就没有用堆优化了。(这里很容易出错,debug两个小时在一个double型的mn
阅读全文
摘要:一、题目描述 二、解题思路 一个kruscal模板题,只需要把最大的排在前面数k条就行了。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 int n,m,k; 4 int a[100010]; 5 struct node{ 6
阅读全文
摘要:一、题目描述 二、解题思路 首先预处理出路径长度,标记点。然后,因为只能装s个,所以答案就在前面p - s条路径中最长的那条,因为我后面那p - s + 1之后的只会导致答案变大,这里有点点贪心的思想,所以答案就只能是前面p - s中最大的那条就行了。 三、代码实现 1 #include "bits
阅读全文
摘要:一、题目描述 二、解题思路 利用kruscal算法求解,原来一共有n个点,看看能不能缩成k个点,如果能就输出ans,如果不能输出No Answer。因为kruscal是从最小的边开始,所以答案肯定是最小的,符合正确性。 三、代码实现 1 #include "bits/stdc++.h" 2 usin
阅读全文
摘要:一、题目描述 二、解题思路 Floyd模板题 三、代码实现 1 #include "bits/stdc++.h" 2 long long dp[1100][1100]; 3 const int inf = 1e9; 4 using namespace std; 5 int main() 6 { 7
阅读全文
摘要:一、题目描述 二、解题思路 Dijkstra模板题 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 const int inf = 1e9 + 10; 4 int graph[2510][2510]; 5 int n,m,s,t;
阅读全文
摘要:一、题目描述 二、解题思路 floyd模板题 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 const int inf = INT_MAX; 4 long long dp[110][110]; 5 int rd[11000];
阅读全文
摘要:一、题目描述 二、解题思路 Dijkstra的优化版,时间复杂度用优先队列优化,空间复杂度用链式前向星优化。(标准版直接交就行了) 三、代码实现 1 #include "bits/stdc++.h" 2 #define PII pair<long long,long long> 3 using na
阅读全文
摘要:一、题目描述 二、解题思路 tarjan求割边模板题,用个答案数组存答案,求出来后排序就可以了。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 int G[200][200]; 4 int low[200],dfn[200],t
阅读全文
摘要:一、题目描述 二、解题思路 Dijkstra模板题,套模板即可。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 const int inf = 1e9; 4 int dis[210],vis[210]; 5 int graph[
阅读全文
摘要:一、项目名称 五子棋 二、项目思路 1、搜集图片材料 2、绘制棋盘 3、实现鼠标下棋 4、用dfs判断输赢 5、实现双方下棋 6、实现AI下棋 (1)使用AI估分函数 (2)设计AI计算深度 (3)优化AI算法(α-β算法) 三、代码实现 1 #include <stdio.h> 2 //加载图形库
阅读全文
摘要:一、题目描述 二、解题思路 这个题目思路不难,但是容易坑你,就是中间为了防止特殊情况发生需要加上1个特殊字符,防止判断错误。(等会再说) 这个题目要我们求拼接后的单词,但是前一个单词的后缀和后一个单词的前缀的相重合的部分不再相加,所以我们想到了kmp算法,用string把输入串接上目前答案串,写个k
阅读全文
摘要:一、题目描述 二、解题思路 数据量不大,直接暴力枚举即可,计算最大的答案。 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 int main() 4 { 5 char s1[110],s2[110]; 6 cin >> s1 >>
阅读全文
摘要:一、解题思路 哈希模板题,我用map解决了 二、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 map <string,int> ans; 4 string temp; 5 int cnt; 6 int main() 7 { 8 in
阅读全文
摘要:一、题目描述 二、解题思路 给出了c是已知,然我们求A和B是否存在,把等式变换一下,A = C + B,然后用hash判断即可,当然我用的是map(stl大法好),防止重复的没有被加到。 三、代码实现 1 #include <bits/stdc++.h> 2 using namespace std;
阅读全文
摘要:一、题目描述 二、解题思路 这个题的数据量有点大,考虑hash,然后就用了set,(stl大法好) 三、代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 set <string> ans; 4 set <string> ans2; 5
阅读全文
摘要:代码实现 1 #include "bits/stdc++.h" 2 using namespace std; 3 const int maxn = 1e6; 4 char s1[maxn + 10],s2[maxn + 10]; 5 int nextval[maxn + 10]; 6 int ans
阅读全文
摘要:一、关键路径算法 关键路径算法是在工程能完成的情况下找出关键的几个活动,达到工程更早完成的效果。 二、算法分析 这个算法中我们需要用到etv,ltv,ete,lte这几个变量,还需要用到确保工程能完成的算法,也就是拓扑排序算法 在这个算法中我们把顶点看作是事件,边权看作是活动持续时间,边看作是活动
阅读全文
摘要:一、拓扑排序(TopologicalSort) 所谓拓扑排序,就是指在一个有向无环图中,每个顶点都有出现的顺序,然后使得每个顶点都能出现。这里顶点可以看成是一个活动。 比如说我们要准备学校的运动会 首先我们要干嘛。。。 其次我们才能干嘛。。 。。。。。。。。。。 。。。。。。。。。。 最后我们才能干
阅读全文
摘要:一、最短路径算法 1.Dijkstra(迪杰特斯拉)也叫作单源最短路径算法 2.Floyd(弗洛伊德)是个多源最短路径算法 二、Dijkstra算法(采用贪心思想) 1.产生 当我们要计算两个确定的点之间的最小成本的时候,我们就能用到这个算法,比如说我们要从长沙去到北京,可以直达,也可以转车,但是你
阅读全文