![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Acwing题库
Acwing题库中的题
丶Kingdom
欢迎批评,欢迎斧正,拒绝嘴臭。
展开
-
Acwing 165.小猫爬山【DFS】【剪枝】
1.题目题目链接:点击这里2.解决思路尽量减少缆车的使用;从0个缆车开始,对于每一只猫咪,如果当前的num个缆车中还有某个缆车能装得下,则把这只猫咪装到这个缆车中,该缆车容积sum减少掉猫咪体重;如果当前num个缆车没有能装下当前猫咪的,则需要新租一个缆车,num++;DFS的过程中,状态空间树上的某个节点若出现num>ans,这个分支也没有继续下去的必要了,剪枝。3.代码#include <iostream>#include <cstdio>#include &原创 2021-09-09 10:52:08 · 116 阅读 · 0 评论 -
Acwing 1117.单词接龙【DFS】
1.题目题目链接:点击这里2.解决思路可以先将所有可能的“衔接”(即接龙)情况枚举出来;对于每一对字符串(A,B)单词A的后缀与单词B的前缀相同,并找到最长的相同情况,记为g[a][b]=length。注意不能将整个A用来接龙。然后对于某个字母开头的字符串使用DFS,找到它能够接龙的最大值。3.代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>原创 2021-09-09 10:02:47 · 141 阅读 · 0 评论 -
Acwing3378.代理服务器【贪心】
1.题目题目描述:点击这里Attention!!! 这道题是清华大学2009年研究生复试机试题2.解题思路贪心思想:我们每次选能够坚持最久不换的代理服务器,也就是遍历输入的m个ip地址,同时记录当前出现过的代理服务器ip;一旦当遍历到某个ip地址时,发现所有的代理服务器ip都出现过,那么记一次转换(即最后发现的这个代理服务器能够坚持最久)同时更新记录(注意:一定要将上一次发生转换的代理服务器ip加入下一轮记录)这里使用set作为存储的数据结构。3.代码#include <iostream原创 2021-08-27 21:54:32 · 127 阅读 · 0 评论 -
Acwing 3573.日期累加【模拟】
1.题目描述题目链接:点击这里2.解决思路老生常谈的日期类题目。这道题把握以下三点:闰年的二月特殊性、跨月和跨年、当月剩余天数。特别需要注意的是,每次跨月或跨年后,日期应更新为0日(因为这是当月剩余天数不足以抵消剩余增加天数,满了上一个月而不足当前月的第一天)3.代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespac原创 2021-08-25 09:47:17 · 76 阅读 · 0 评论 -
Acwing 3812.机器人走迷宫【全排列】
1.题目描述题目链接:点击这里2.解决思路只需要考虑,不管是什么序列,可选方案最多24种(4!种)所以我们只需要用next_permutation搞出0123的全排列,并让它们每一个值与序列中不同的值相对应(如0代表上,可以对应序列中的0,1,2,3;即0,1,2,3都可作为上)然后再按序列跑一遍图就行了。3.代码#include <iostream>#include <cstdio>#include <cstring>#include <algor原创 2021-08-24 10:37:44 · 92 阅读 · 0 评论 -
Acwing 1137.选择最佳线路【SPFA】
1.题目题目链接2.解决方法当要求多个源点到汇点的最短路径,可以将这些源点添加一个虚拟的前驱结点作为虚拟源点;问题转化为求从虚拟源点的单源最短路径问题。3.代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int MAXN=1010,MAX原创 2020-11-30 22:41:49 · 197 阅读 · 0 评论 -
Acwing 1127.香甜的黄油【SPFA】
1.题目题目链接2.解决方法题意就是在一张无向网中寻找一个顶点,使得该顶点到其他顶点的最短路径长度最小。每个顶点都做一次SPFA求单源最短路径,求出路径长度之和,在这些和中找出一个最小的,即为所求答案。3.代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;原创 2020-11-30 12:58:41 · 104 阅读 · 0 评论 -
Acwing 423.采药【01背包】
1.题目题目链接2.水水解决方法01背包水一水博客(佩服竞赛大佬,最近考试复习都要忙s我了,他们是怎么做到一边学习一边刷题精神还贼好没黑眼圈的)3.水水代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN=1010;int n,m,f[MAXN];int main(原创 2020-11-29 23:06:17 · 95 阅读 · 0 评论 -
Acwing 1126.最小花费【单源最短路】【Dijkstra】
1.题目题目链接 点这儿!2.解决方法题目可以抽象为一张无向网,给定的是手续费百分比,边权值可以据此改为扣掉手续费后所剩下的钱的百分比(eg:a与b之间手续费比例为3%,则金钱缩水为0.97)这张无向网,从源点到终点,根据题目要求是要找一条边权乘积最大的路径(具体解释在代码注释部分)乘积最大问题,可以转化为最短路径问题。3.代码#include <iostream>#include <cstdio>#include <cstring>#include &原创 2020-11-06 20:51:53 · 158 阅读 · 0 评论 -
Acwing 272.最长上升公共子序列【LIS】【LCS】
1.题目题目链接:点这儿!2.解决方法本题是将LCS(最长公共子序列)问题和LIS(最长上升子序列)问题结合起来考虑:用f(i,j)表示a串前缀a(1,i)和b串前缀b(1,j)以b(j)结尾的最长上升公共子序列长度,状态集合划分首先可以分为两大子集:①最长上升公共子序列不是以a(i)结尾的情况,f(i,j)=f(i-1,j)②最长上升公共子序列以a(i)结尾的情况,根据状态集合f的定义,此时也有a(i)==b(j);这种情况要讨论b串中的最长上升子序列长度了。值得一提的是,按照上述思路直接得出原创 2020-09-23 23:03:46 · 80 阅读 · 0 评论 -
Acwing 175.电路维修【双端队列BFS】
1.题目题目链接:点这儿!2.解决方法题目中输入的是每个方格,但是考虑问题时,要考虑的是方格顶点之间的连通性;因此,我们对方格顶点建图,转化成从左上角到右下角的最短路径问题。可以发现,横纵坐标之和为奇数的顶点是无法到达的,因为方格上的电路都是主副对角线,在电路上从A点到B点,横纵坐标一定各自变化绝对值1,主对角线:横纵坐标变化1或-1;副对角线:横坐标变化1,纵坐标变化-1,反之同理。因此,如果终点的横纵坐标之和是奇数,那么肯定无法抵达(no solution)对于每个顶点,其周围的四个顶点可能可以原创 2020-09-21 13:08:07 · 140 阅读 · 0 评论 -
Acwing 179.八数码【A*算法】
1.题目题目链接:点这儿!2.解决方法本题仍然是运用A*算法求解,将状态中每个数距离自己合法位置的曼哈顿距离之和作为估价函数,将估价函数与距离起点状态的实际距离作为估计值,搜索中的每个状态都有一个这样的估计值,用小根堆使每次搜索扩展结点时保证是估计值最小的状态(也就是最短路径上的状态)3.代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#i原创 2020-09-19 20:05:11 · 205 阅读 · 0 评论 -
Acwing 178.第k短路【A*算法】
1.题目题目链接:点这儿!2.解决方法A*算法用来求高复杂度的最短路径问题;本题要求第K短路,这就要求将从起点到终点的所有路径中选出第K短的;我们不可能去把从起点到终点的所有路径一一找出来,那样复杂度太高了;所以我们采用启发式搜索的搜索模式:利用一个估价函数g()作为“启发函数”。本题中将从终点出发的单源最短路作为估价函数值,这样,每个点在被从起点出发遍历时,都有一个预先知道的距离终点的最短路径长度,可以优先顺着这些点遍历,可以确定最终会遍历到终点;并且,不止一条路径会抵达终点,抵达的先后次序也就是原创 2020-09-17 19:42:56 · 155 阅读 · 0 评论 -
Acwing 173.矩阵距离【BFS】
1.题目题目链接:点这儿!2.解决方法题目中提到曼哈顿距离,实际上就是矩阵中求最短路这种题的点到点的距离;求最短路,很自然的想到BFS(毕竟如dijkstra、spfa 等最短路算法的实现本质上很像BFS)求最短路,可以从起点到终点,也可以从终点到起点(比如记录最短路径经过的点,最好这样做)现在的问题是,看起来起点有很多个,终点也有很多个,如果从每个非1的点开始,BFS求最近的1(有点像flood fill?)这样粗略分析一下,复杂度O(n^4/4)!太恐怖了!不如这样考虑:利用BFS队列中序列具有原创 2020-09-16 20:02:00 · 204 阅读 · 0 评论 -
Acwing 275.传纸条【DP】
1.题目题目链接:点这儿!2.解决方法此题与数字三角形(Acwing.898)属于一种DP模型,但区别在于,这里是从A走到B,再从B走到A,相当于走两遍;这个过程可以理解为两个不同的点从起点出发,沿着互不相交的收益最大路径走到终点(题目中条件“每个同学只能帮一次”暗示状态点只能被经过一次)从起点同时出发,意味着相同时刻,两点的横纵坐标值和一定相等。由此,可以用f(k,x1,x2)表示状态,k=x1+y1=x2+y2;当x1=x2的时候,两条路径相交(走到了同一个点,x1=x2,y1=y2)注意只能经原创 2020-09-10 20:28:19 · 142 阅读 · 0 评论 -
Acwing 1015.摘花生【DP】
1.题目题目链接:点这儿!2.解决方法此题和入门题数学三角形(Acwing.898)属于一种DP模型,关键都是用最后一步的路径方向进行状态集合的划分;f(i,j)表示从(1,1)走到(i,j)能够摘到的最多花生,以最后一步向下走抵达(i,j)和向右走抵达(i,j)这两种情况进行状态集合划分,得到状态转移方程为f(i,j)=max{f(i-1,j),f(i,j-1)}+s(i,j),枚举所有状态集合,最后得到f(n,n)为最后所求状态。3.代码#include <iostream>#i原创 2020-09-10 19:57:24 · 85 阅读 · 0 评论 -
Acwing 320.能量项链【区间DP(环拆链)】
1.题目题目链接:点这儿!2.解决方法区间DP是有固定模板的DP类型,它解决的问题都有合并区间(或理解为序列元素)求最优耗费这种模式,而且往往给定的是一个序列,像一个链条一样。但是如果链条的首尾串起来,变成环,该怎么运用区间DP的套路?可以将给定序列复制一倍放在序列的后面,这样做来模拟在环上操作。这样我们得到的最优解需要从通过状态转移方程计算出的f(1,n),f(2,n+1),…,f(i,n+i-1)中寻找。3.代码#include <iostream>#include <cs原创 2020-09-06 23:16:32 · 163 阅读 · 0 评论 -
Acwing 8.二维费用的背包问题【01背包】
1.题目题目链接:点这儿!2.解决方法在基础的01背包问题上增加了一维花费,原来只有体积,现在多了一维重量;同样采用和01背包相同的思路,循环枚举体积和重量;原先优化的一维数组这里也要变成二维数组。3.代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN=1010,MAXM原创 2020-09-06 18:38:56 · 114 阅读 · 0 评论 -
Acwing 107.超级快速排序【归并排序,逆序对】
1.题目链接点这里2.思路题意:求序列逆序对的数量。利用归并排序中合并两个子序列的过程来统计逆序对数量。3.代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN=5e5+10;typedef long long LL;int n;LL s[MAXN],tmp[M原创 2020-08-26 21:28:57 · 150 阅读 · 0 评论