算法竞赛入门经典第七章例题(15/15)
终于搞完第七章了,能学算法了!
最近想培养下dp,快点冲到第九章,gogogo
暴力,码量和模拟相差无几🤕
Division
题意: 输入一个n,让你得到\(abcde/fghij=n\) 的合法表达式
题解:直接枚举fghij即可,复杂度 \(O(\prod_{r=5}^{10}r)\)
code
1 |
|
Maximum Product
题意:给你n个元素,让你找出一个乘积最大的连续子序列,非正数则输出0
题解: n<=18, 直接枚举左右界即可, \(n^2\)暴力
code
1 |
|
Fractions Again?!
题意:给你一个k,让你找到所有正整数x>=y, 使\(\frac{1}{k}=\frac{1}{x}+\frac{1}{y}\)
题解:枚举y在[1, 2k], 检查x, 由条件推得\(\frac{1}{k}=\frac{1}{y}+\frac{1}{y}\), 可的y<=2k
1 |
|
Prime Ring Problem
题意:给出n,然你从1开始排列,使得形成相邻元素和为素数的环
题解:回溯check即可
1 |
|
Krypton Factor
题意:保证字符串没有相邻重复的串, 用前L个字符构造长度为n的串
题解:回溯,check后缀即可,改变的只有最后一个
1 |
|
Bandwidth
题意:给出一个图,让你给出一个节点排列,使得带宽最小,定义带宽为图上相邻两点在排列上的最大距离
题解:最优性剪枝,注意输入与输出
1 |
|
Mobile Computing
题意:给出房间宽度和s个挂坠的相应重量, 让你给出尽量宽的天平宽度,使得天平平衡t
题解:搜索对象的选取,搜索节点左右子树,取结果的最大值
code
1 |
|
Fill
题意:给你三个容量为a, b, c的杯子,只有第三个杯子是满的,问你能否使得一杯水恰好d L
题解:和八数码一样,重点在隐式图节点的建立。将a和b水杯的容量作为节点值,因为总水量不变。在隐式图上搜索即可
code
1 | /************************************************************************* |
The Morning after Halloween
题意:有最多三个小写字母要回到对应大写字母的地方问你最少的步数
题解:将小写字母位置作为隐式图节点,因为“Any 2 × 2 area on any map has at least one sharp”, 所以大部分空地都与格子相邻,提前建好图,跑隐式图
code
1 | /************************************************************************* |
Editing a Book
题意:通过cv操作使给出的序列变为升序, 可以操作连续一段区间, 问你需要最小操作数
题解:枚举剪切,使用IDA*进行优化,n=9时深度为8, 由于每次剪切最多影响三个数字的后缀,因此当 \(d + h() / 3 > maxd\)时可以剪枝
code
1 | /************************************************************************* |
Zombie's Treasure Chest
题意: 给你两种无限数量的宝物和一个体积为N的宝箱,让你计算最多能装多大价值的宝物
题解:当N/S1比较小时,可以枚举宝物1即可,当N/S2比较小时,可以枚举宝物2即可 当两者都较大时,考虑S2 * V1与S1 * V2的大小,当前者较大时,S2最多拿S1 - 1个,反之S1最多只能拿S2 - 1个
code
1 | /************************************************************************* |
The Rotation Game
题意:通过旋转A~H,使中间八个数字相同
题解:搜索三次,中间全为1, 全为2和全为3, 总状态只有24!/(8!*16!)
code
1 | /************************************************************************* |
Power Calculus
题意:输入一个n,问你需要几次乘除才能从x得到\(x^n\)
题解:容易想到迭代加深,但会T,升为IDA*,考虑当前最大的指数乘以\(2^(maxd-d)\)仍然小于n,则剪枝
code
1 | /************************************************************************* |
Lattice Animals
题意:让你求w * h的网格里的n连块有多少个
题解:打表,构造所有连通块,连通块都进行格式化,用set判重
code
1 | /************************************************************************* |
Square Destroyer
题意:让你把一个n边的2n(n+1)的正方形火柴矩阵破坏
题解:建立各个正方形,使用用IDA*, 从小正方形开始破坏,当当前至少需要破坏的正方形加上d > maxd时,剪枝
code
1 | /************************************************************************* |
写完习题题解就能快乐的学习第八章了!
gogogo