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