第七章 暴力求解法 (例题)
aozil_yang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
例题7-1 UVA 725 Division除法
思路不太好,借鉴一下吧 整体思路:分析可知第一个数肯定是个五位数,第二位要么是五位数,要么是四位数,所以呢,第一个循环直接扫第一个五位数,从10000扫到99999只有当五个数字各不相同,并且通过除法算出第二个数,判断两个数各个数字都不相同即可输出: #include #include using namespace std; const int maxn = 10; int judge(i原创 2015-12-20 23:14:48 · 607 阅读 · 0 评论 -
例题7-8 UVA 10603 Fill 倒水问题
完全仿照紫书上来写的! 书中大体思路是: 用ans[]来记录答案,不断取最小值来更新! 用vis[][]来表示是否访问过,之所以是二维数组,是因为总水量是固定的,两个杯子确定,第三个杯子自然也就确定,两个状态足矣! 用结构体表示每一个状态!其中包括每个杯子的水量!u.wat[],还有dist 为到目前这个状态总的取水量! 然后用优先队列不断倒水, 有一个技巧,代码中先算出需要倒的水量,原创 2016-03-04 07:57:09 · 915 阅读 · 0 评论 -
例题7-7 UVA 1354 Mobile Computing (搜索+二叉树(类哈夫曼树))
思路: 想一想就可以知道,一个结点要么有两个儿子,要么没儿子。 那么这就很像哈夫曼树,因此我们可以枚举所有的哈夫曼树(任意枚举两个不同的结点来合并) 然后从根结点开始遍历二叉树,在遍历的同时,来枚举左边 和右边的最大值。 然后R-L 便是这个二叉树的宽度。 更新一下答案即可! 有一个小小的坑把,没注意到: 就是只有一个砝码的时候,答案应该是0 不是-1. 想一想还是很实际的: 只原创 2017-01-22 16:17:21 · 476 阅读 · 0 评论 -
例题7-5 UVA 129 Krypton Factor (困难的串,搜索)
题意: 给你n 和l ,求出按字典序来算第n小的由前l 个字母组成的困难的串,如果一个字符串中包含两个相邻的重复子串,那么是容易的串,否则是困难的串。 思路: 直接搜索即可! 当枚举到第c 位时,我们只需要判断后缀是否重复即可,因为前面的都已经判断过了。另外如果一个字母一个字母枚举的话,那么就已经保证了字典序的顺序了,无需在排序了。 输出格式注意下即可。 #include #incl原创 2017-01-20 14:02:00 · 479 阅读 · 0 评论 -
例题7-4 UVA 524 Prime Ring Problem
题意: 给你数字n ,求的一个1~n 的数字环,使得任意相邻的数的和为素数! 打印所有解。 思路: 直接素数打表判断素数,回溯法暴力每一个位置的每一个数即可。 #include #include #include #include #include using namespace std; unordered_mapmp; int vis[100]; void init(){原创 2017-01-20 13:13:15 · 337 阅读 · 0 评论 -
例题7-10 UVA 11212 Editing a Book (IDA*搜索)
大体题意: 给你一个n 个数全排列数组,要求你可以选择一个连续的序列 随便插到一个位置,求最少几步 能到达严格上升的序列? 思路: 正解是IDA*搜索。 一开始简单的以为是BFS ,一想 他还是一个 全排列的数组 用康托展开不正好可以完美哈希么,就写了个bfs 加了一些剪枝 ,9个数的数据跑的非常慢。 应该用dfs。 根据刘汝佳的分析,有几个地方分析的非常巧妙。 我们可以利用后继不原创 2017-02-09 15:13:40 · 448 阅读 · 0 评论 -
例题 7-6 UVA - 140 Bandwidth 带宽 (全排列暴力)
UVA 蹦了 不知道能不能过 先写上在说,不对在改吧! 思路很简单: 直接从输入中建立出一张图,然后全排列枚举图,在每一个全排列中遍历带宽 最后更新答案! #include #include #include #include #include #include #include using namespace std; const int maxn = 200 + 10; const原创 2016-05-31 15:54:09 · 674 阅读 · 0 评论 -
例题7-12 UVA - 1343 The Rotation Game 旋转游戏(IDA*)
题目大意: 给一个棋盘,问最少进行几次旋转使得中间的数字全部相等!(并且字典序最小!) 思路: 借鉴了代码仓库,感觉写的很巧妙,简单记录一下! 大致思路: 用line [][] 二维数组给棋盘进行标号! a[] 一维数组代表当前的棋盘中棋子的标号! center[] 一维数组代表棋盘中间棋子的标号! rev[]数组进行反转列 ,减少了很多代码! 先判断是否合法,合法的话直接输出。原创 2016-05-04 00:22:32 · 586 阅读 · 0 评论 -
UVA UVA - 1374 Power Calculus 快速幂计算(迭代加深搜索)
大体题意: 给你一个数n,计算如何从x 经过乘法除法快速计算到 x^n。 输出最短长度! 思路: 直接迭代加深最短长度! 在dfs中,有两个参数cur 和 s 分别代表当前层数和当前的指数! 只有当cur == 深度 并且 s 等于 n时 成立! 当cur大于深度 剪枝! 或者s × 2 ^ (maxd-cur) 说一下这里,maxd - cur 是剩余的步骤数,s为当前的数原创 2016-05-12 22:40:00 · 744 阅读 · 0 评论 -
例题7-2 11059 Maximum roduct最大乘积
很简单的一道题,直接1Y。 直接扫描就可以了! 需要注意的是: 1.格式问题,是每输出完一组数据便输出一个空行! 2.循环问题:i,j两个循环变量要从同一个值开始! #include #include #include using namespace std; const int maxn = 20; int main() { //freopen("a.txt","w",std原创 2015-12-19 23:54:17 · 538 阅读 · 0 评论 -
7-3 UVA 10976 Fractions Again?!分数拆分
这个题目在看了分析后,感觉非常简单!直接1Y,但还是有非常大的收获的! 这个题没有什么格式问题,有的只是暴力的技巧, 思路就不多说了 ,紫书说的很清楚, 收获: 1.暴力求解题并不是完全的暴力,暴力求解也是有一定技巧的,以后做这种题要先分析数学式子,找到数据范围后,在暴力,这样会简单很多很多! 2.在判断一个分式是不是整数的时候,不要直接变为浮点数,直接让分子分母两个整数,进行取余运算看原创 2015-12-15 18:27:19 · 696 阅读 · 0 评论 -
例题7-9 UVA - 1601 && POJ 3523 The Morning after Halloween (双向BFS)
大体题意: 你给一个h*w 的网格,网格上最多有三只小鬼,小鬼用小写字母abc 表示,他们的目标用ABC表示,问小鬼移动到目标最短的步数,他们可以同时走,走法有五种:上下左右和不动,其中有几种情况的走法是非法的: 1.两只小鬼一步以内交换了位置。 2.两只小鬼的下一步是同一个位置。 其余情况合法! 思路: 先将不是#的位置变成标号。 然后把所有空格提出来建立一张图,把初始位置原创 2016-05-29 13:00:01 · 811 阅读 · 1 评论
分享