![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索-回溯法
LYoGa
这个作者很懒,什么都没留下…
展开
-
UVA165
题意:h表示可以贴的邮票的数量,k表示能用的邮票的面值的数量,求所拥有的面值能连续组合而成到最大是多少,也就是连续邮资问题。思路:DFS+回溯#include#include#include#include#includeusing namespace std;int h, k, d;int a[11], b[11], vis[200];void judge(int原创 2013-07-27 19:04:42 · 645 阅读 · 0 评论 -
UVA10317- Equating Equations(回溯+剪枝)
题目链接题意:给出一个式子,但这个式子不一定是等式,在‘+’,‘-’符号位置不变的情况下,重新排列数字的位置,使其成为等式,如果可以的话,输出其中一种排列方式。思路:我们将等号右边的数全部移动到等号右边,例如a+b-c=d-e,移动后变成a+b+e-(c+d)=0,也就是a+b+e=c+d,所以当式子可以变化成等式时,所有数的和必然是偶数。那么问题可以转化为在n个数中找原创 2014-08-15 16:58:42 · 961 阅读 · 2 评论 -
UVA110- Meta-Loopless Sorts(模拟全排列)
题目链接题意:给你n个数,要求按照题目所给的规则大小排序,输出所有可能的结果。思路:其实求出来的所有序列是n个数的全排列,那么难点在于怎么按照题目所给的格式输出。我们可以看出其实是在已知的序列上插空,所以就可以使用回溯来插入元素,这里可以使用vector,方便元素的插入。#include #include #include #include #include原创 2014-08-15 20:49:29 · 828 阅读 · 0 评论 -
UVA208
题意:找出所有能到达目标地点的道路,最后输出总路线数思路:刚开始看到之后觉得不难,就是DFS,然后回溯输出路线,但写完之后,交上去,就TLS,超时,看了下别人的题解,因为有21个结点,如果不剪枝会超时,所以先将与 #include #include#define N 22 int map[N][N], vis[N], a[N], b[N];i原创 2013-07-27 19:22:54 · 679 阅读 · 0 评论 -
UVA524- Prime Ring Problem
题目链接题意:给出整数n,输出所有素数环思路:回溯求解,注意输出时,每两组之间输出一个空行#include #include #include #include using namespace std;const int MAXN = 105;int n;int arr[MAXN], prime[MAXN], vis[MAXN];int i原创 2014-08-11 19:26:04 · 698 阅读 · 0 评论 -
UVA10400- Game Show Math
题意:给出p个数字,使用+,-,*,/,这四个运算符使得最后结果等于n(四个运算符的优先级相同)思路:回溯+剪枝,不剪枝的话会TLE。用一个标记数组记录在计算的结果。#include #include #include #include #include using namespace std;const int MAXN = 32000;const in原创 2014-08-01 19:43:11 · 774 阅读 · 0 评论 -
UVA620- Cellular Structure
题意:有三种形态的细胞排列,除了这三种,其他都为细胞变异。求suo原创 2014-07-07 21:08:33 · 565 阅读 · 0 评论 -
UVA301- Transportation
题意:有个城市,从起始站到末站,一共有n个车站。车的载客量是有限制的,有m个订单,要求运输企业的利润最大化,也就是说,订单要么一整个接受,要么拒绝思路:利用DFS回溯,对于一个订单而言,要么接受,要么就是拒绝,记录每条订单的起始站到末站的人数,不能超过最大载客量#include#includeint p, num, order, max;int cnt[100];struct原创 2013-09-05 20:04:29 · 773 阅读 · 0 评论 -
UVA539- The Settlers of Catan
题意:给n个点,给你点与点之间的关系,求出最大的路线思路:DFS,用深搜,不断更新最大值。。。。#include #include#define N 30 int n, m, max;int map[N][N];void dfs(int x, int cnt) { if (cnt > max) max = cnt; for(int i = 0; i < n;原创 2013-09-03 20:45:45 · 739 阅读 · 0 评论 -
UVA657- The Settlers of Catan
题意:给出图像,输出所表示点数的升序思路:利用两次DFS,一次用来搜索色子的位置,在这个DFS中再嵌套一个DFS,搜索点数的大小。。。。用标记的方法,WA了无数次,而且还找不到原因。。。。所以就将遍历过的点都转化为‘.’,才A了。。。万般无奈。。。#include#include#include#include#include#include#includeusing nam原创 2013-09-03 20:48:58 · 699 阅读 · 0 评论 -
UVA10344
题意:给出5个数字,自由组合,用+,-,*,是否能算出23思路:全排列,然后就深搜,是否能得到23#include#include#includeusing namespace std;int arr[5];int flag;void dfs(int x, int d){ if(flag) return; if (x == 5){ if(d原创 2013-07-20 10:18:22 · 514 阅读 · 0 评论 -
UVA193
题意:使相连的两点都不能为黑色,求所染的色中黑色的数目最大思路:先将所有点都染为白色,然后再进行染黑色,如果染黑色,则进行下一次递归时,要记得数目num+1,如果没有的话,就不要+1;#include#include#define N 105int color[N], black[N];int map[N][N];int Max, n, a, b, num; int原创 2013-07-27 19:15:49 · 630 阅读 · 0 评论 -
UVA140
题意:在每种排列中,每个相连接的点都有最大的带宽,再比较各个点的带宽,取最大的那个带宽,但题目是要让我们找出在所有排列中取出的那个带宽最小。思路:DFS+回溯,但要记住如果出现带宽相等时,要取那个字典序小的输出,这题的输入处理数据有些麻烦。。。。。。#include#include#includechar s[10], str[10];int vis[26], map[26][2原创 2013-07-27 19:27:02 · 838 阅读 · 0 评论 -
UVA639
题意:找出一张地图最多能放多少个互相不能碰到的酒鬼,横纵都不能碰面思路:类似于八皇后的题目,看了一下别人的代码,自己又想了一下,就是DFS,不断更新最大值#include#include#includeusing namespace std;char map[10][10];int vis[10][10];int n;int wall(int a, int b){ fo原创 2013-07-20 10:16:16 · 506 阅读 · 0 评论 -
UVA167
题意:求所放的皇后的位置的和最大思路;八皇后问题,从第一行开始放皇后,看要放在哪一列,之后递归,回溯,判断与之前所放的皇后是否冲突,如果冲突则不进行这次搜索,跳到下一次#include #include int arr[8][8], c[8]; int sum;void search(int cur, int d){ if (cur == 8){ if (d > sum)原创 2013-07-27 19:10:44 · 1336 阅读 · 0 评论 -
10624 - Super Number
题目链接题意:给出n到m的范围,求出一个数在前i位数组成的数字能被i整除,如果存在输出这个数,如果不存在,输出-1.思路:回溯,每次放第i位,然后判断是否符合题意。这题踩着时间过去的2.6s(看了下别人的题解,可以减少取模次数来节省时间)。代码:#include #include #include #include using namespace原创 2014-08-18 21:37:07 · 852 阅读 · 0 评论