2021.2.4做题小结

1.[luogu]P3376 【模板】网络最大流

题意:RT

思路:模板题

注意细节啊,卡了好久

2.可达性统计

题意:给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量。

思路:f(x)表示x能够到达的点的集合,用 N 位二进制数(bitset)存储每个 f(x) ,其中第 i 位表示 x 能否到 i。知如果有一条边 (u,v) 则 v 能到达的点 u 一定也可以到,所以 f(x)|=f(v)。记忆化搜索可做

2021.2.4做题小结

或者先按照拓扑排序算法求出拓扑序,然后按照拓扑序的倒序进行计算

3.小猫爬山

题意:http://fzuoj.xndxfz.com/problem/2062

思路:深搜裸题

4.「POJ2676」Sudoku

题意:给定一个不完整9×9 数独,未填部分用0表示,恢复数独。

思路:深搜,判断在那个方格值得注意:int pos1=ceil(x/3.0);int pos2=ceil(y/3.0);(pos1-1)×3+pos2;即为宫格标号。

注意:当跳转行的时候,不仅考虑下一行,还有考虑上一行

5.「POJ2248」Addition Chains

题意:给定一个数n,要找出一个最短的序列,满足: 1、第一个元素为1,最后一个元素为n 2、序列为升序 3、每个元素都是由它之前的两个元素(可以是同一元素)相加得到

思路:迭代加深,当搜索树的分支随深度增大得很快的时候,最适合用迭代加深

这题正好符合迭代加深的要求:搜索树每个节点扩展的情况很多,且答案节点位置较浅。

用序列中已有的数去构造后续的数,一次dfs只构造dep个。有一个强剪枝是ans[i]<=ans[i-1]×2,若已知ans[k],迭代加深的最大深度为maxd,则后面最多还有maxd-k项,也就是若 ans[k]×2^k 小于 n 则在maxd次之内一定找不到答案

6.「TYVJ1340」送礼物

题意:从给定的 N 个数中选择几个,使它们的和最接近 W

思路:搜索 选/不选 当前位置的数-->2^45的复杂度,太高

观察部分分,发现 2^26 的复杂度是可以过的 ,所以考虑折半搜索,将礼物分成两半。

首先,搜索出从前一半礼物中选取若干个,可能达到的 w 之间的所有重量值,存放在 s 数组中,并对 s 数组进行排序。然后进行第二次搜索,尝试从后一半礼物中选出一些。对于每个可能达到的重量值 val,在 s 数组中二分查找 <= w-val 的数值中最大的一个,用二者的和更新答案即可(蓝书p112)

注意:两次dfs的函数名不要写混了!(调了我好久)

7.「BJWC2010」矩阵距离

题目:http://fzuoj.xndxfz.com/problem/2742

思路:多源bfs,目的是保证队列的单调性

8.「POJ3322」Bloxorz

题目:http://fzuoj.xndxfz.com/problem/2758

思路:step[x][y][statu]记录从初始位置到达当前位置,当前形态的最少步数,bfs硬刚即可

注意:方向数组的运用

上一篇:适用于Ubuntu的交叉编译工具下载


下一篇:vscode debug problem solution