AcWing 188.武士风度的牛 算法思路 还是熟悉的Dijkstra,但是这次的行为模式变成了象棋中🐎的行进方式罢了。 算法实现 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768#include <iostream&g 2022-01-24 #算法学习 #AcWing #搜索
AcWing 1076.迷宫问题 算法思路 本题实际上就是Dijkstra算法的一个小扩展,需要加入对于路径记录的支持。故可以考虑开辟一个pre[][]数组保存当前点需要走的下一步,通过迭代得到从起点到终点的路径即可。 算法实现 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555 2022-01-24 #算法学习 #AcWing #BFS
AcWing 1106.山峰和山谷 算法思路 本题实际上只是在1097和1098的基础上增加了少量的额外操作。对于判断山峰山谷的操作只需要在确定连通域的同时确定在该连通域边界是否存在更高或更低的格子再进行判断。 代码实现 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 2022-01-19 #算法学习 #AcWing #搜索
AcWing 1098.城堡问题 算法思路 本题实际上不难,和1097解法相同,唯一需要注意的问题是本题使用多个数字之和表示每个房间的墙的情况。但是根据题意实际上就是用一个四位二进制表示,直接按位判断就可以。 算法实现 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 2022-01-19 #算法学习 #AcWing #搜索
AcWing 1097.池塘计数 题目思路 本题目较为简单,但是题目给出的数据若采用递归进行实现会导致stack overflow,故选择使用迭代算法实现。即采用BFS的思想进行计算,通过一个队列存储当前待访问的点并持续进行入队出队操作最终完成洪泛。 实现代码 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474 2022-01-19 #算法学习 #AcWing #搜索
AcWing 320.能量项链 算法思路 本题是一道经典的区间DP问题。 对于一串珠子\((i_1, j_1), (i_2, j_2)...(i_n, j_n)\)假设对其中任意一个区间进行合并,例如对\((i_k, j_k)...(i_s, j_s)\)这一段的所有珠子进行合并,最后一次合并的值(释放的能量)取决于合并的顺序。但是同样可以考虑对合并点进行枚举得到结果。 考虑当合并区间首尾确定的情况下,该次合并的结果只与其的合并 2022-01-10 #算法学习 #AcWing #区间DP #DP
AcWing 1068. 环形石子合并 算法思路 对于石子合并,对于第\(i\)和第\(i + 1\)两堆石子进行合并,将会得到得分\(a[i] + a[i + 1]\)。 即可以考虑对于第\(1...n\)号石子,最后一次合并的得分必然为所有石子数量的总和,即可以选择一个中间位置\(i\),即第\(i\)次合并后的总得分为\(sc[1...i] + sc[i + 1...n] + a[1 ... n]\)即为前半段的得分加上后半段的得 2022-01-09 #算法学习 #AcWing #区间DP #DP #区间和
AcWing 105. 七夕祭 算法思路 考虑到本题的实际操作机制,行内相邻交换不会导致列分布变化、列内交换不会导致行分布变化,根据这点我们可以将本题拆分为分别对行和列做循环交换操作。 假设一个环形结构\([a_1, a_2 ... a_n]\),需要将其中所有的数字通过相邻数字间的交换变为\(a\),假设从\(a_i \to a_{i + 1}\)传递\(x_i\)个数字(\(x_i\)可正可负,且\(a_n\to a_1\) 2022-01-09 #算法学习 #AcWing #排序
AcWing 100.IncDec序列 算法思路 算法基于查分数组的前缀和即是原数组的思想进行。 对于在原始数组上[m, n]区间每个数字+n,体现在差分数组上即第m个数字+n同时第n+1个数字-n。 本题提供的基本操作可以使用差分进行表示,即每次+1或-1的操作可以在差分数组上对两端的数字进行操作实现,对于整个差分数组可以用一个折线图进行表示,可以发现当所有的数字经过该操作到达相同值所需步骤最少的过程必然是所有数字达到重叠的区域内。 2022-01-07 #算法学习 #AcWing #贪心 #差分
AcWing 91.最短Hamilton路径 算法逻辑 本题采用状态压缩DP方式实现。 定义状态i为一个二进制串,其中1代表已访问的点,0代表未访问的点。DP数组定义为 当前状态*当前正在访问的点。 2022-01-07 #算法学习 #AcWing #DP #状态压缩DP