暴力搜索
Nicolas Lee
Yesterday you said tomorrow
展开
-
历届试题 分考场 回溯
题目链接 蓝桥杯---历届真题 题解 n个人参加某项特殊考试。 为了公平,要求任何两个认识的人不能分在同一个考场。 求是少需要分几个考场才能满足条件。输入格式 第一行,一个整数n(1<n<100),表示参加考试的人数。 第二行,一个整数m,表示接下来有m行数据 以下m行每行的格式为:两个整数a,b...原创 2019-05-18 15:23:18 · 650 阅读 · 0 评论 -
算法提高 学霸的迷宫
题目链接问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗。但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维的格子迷宫,要进城堡必须得先通过迷宫。因为班长还有妹子要陪,磨刀不误砍柴功,他为了节约时间,从线人那里搞到了迷宫的地图,准备提前计算最短的路线。可是他现在正向妹子解释这件事情,于是就委托你帮他找一条最短的路线。分析:要求字典顺序遍历,则直...原创 2019-03-02 12:08:21 · 232 阅读 · 0 评论 -
算法提高 特殊的质数肋骨
题目链接问题描述 农民约翰母牛总是产生最好的肋骨。你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组成一个质数。 例如有四根肋骨的数字分别是:7 3 3 1,那么全部肋骨上的数字 7331是质数;三根肋骨 733是质数;二根肋骨 73 是质数;当然,最后一根肋骨 7 也是质数。...原创 2019-02-28 22:15:25 · 232 阅读 · 0 评论 -
算法提高 8皇后·改
题目链接 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大。具体解释详见:算法训练 王、后传说 (回溯法)#include <cstdio>#include <algorithm>using namespace std;const int LEN = 8;int cell[LEN][LEN], vis[3...原创 2019-02-17 19:12:31 · 239 阅读 · 0 评论 -
算法提高 排列式
题目链接问题描述 7254是一个不寻常的数,因为它可以表示为7254 = 39 x 186,这个式子中1~9每个数字正好出现一次 输出所有这样的不同的式子(乘数交换被认为是相同的式子) 结果小的先输出;结果相同的,较小的乘数较小的先输出。输出格式 每一行输出一个式子,式子中的等号前后空格、乘号(用字母x代表)前后空格 较小的乘数写在前面样例输出问题中的式子在...原创 2019-02-11 14:28:59 · 250 阅读 · 0 评论 -
算法提高 最长字符序列
题目链接问题描述 设x(i), y(i), z(i)表示单个字符,则X={x(1)x(2)……x(m)},Y={y(1)y(2)……y(n)},Z={z(1)z(2)……z(k)},我们称其为字符序列,其中m,n和k分别是字符序列X,Y,Z的长度,括号()中的数字被称作字符序列的下标。 如果存在一个严格递增而且长度大于0的下标序列{i1,i2……ik},使得对所有的j=1,2,……k...原创 2019-02-09 17:20:40 · 218 阅读 · 0 评论 -
蓝桥杯 算法训练 Consanguine Calculations 枚举
题目链接 问题描述 每个人的血型都有两个标记,这两个标记被叫做ABO血型系统的等位基因,每个标记都代表了ABO三个字母之一,因此我们有6种可能的基因组合,而每一种组合都表示了一个特定的ABO血型。 组合 ABO血型 AA A AB AB AO A BB B BO B OO O 与之相对应的,每个人同样有两个Rh血型系统的等位基因,而这两个等位基因的标记是...原创 2019-02-07 13:56:38 · 669 阅读 · 0 评论 -
算法训练 猴子分苹果
题目链接问题描述 秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分。这些猴子很崇拜猴王孙悟空,所以都想给他留一些苹果。第一只猴子悄悄来到山洞,把苹果平均分成n份,把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起。这些猴子依次悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个苹果。第二天,这些猴子来到山洞,把剩下的苹果分成n分,巧了,还是剩下了m个。问,原来这...原创 2019-02-07 11:47:42 · 823 阅读 · 0 评论 -
算法训练 和为T
题目链接问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T。每个元素限选一次,不能一个都不选。#include <iostream>using namespace std;long long a[25], select[22], cnt, res, n;void solve(int cur,long long sum){ if(cur ...原创 2019-02-06 20:46:01 · 287 阅读 · 0 评论 -
算法训练 According to Bartjens 字符串四则运算
题目链接 问题描述 Bartjens教授十分在意算术——因为他比较传统。他决定给学生布置一些计算作业,并且不能使用电子设备。不幸的是,Bartjens教授的打印机实在是太旧了,不能和新的打印机兼容。打印出了题目后,教授发现所有的符号都丢失了!例如2100-100=,被打印成了2100100=。不过,数字和等号被正确的打印了。更糟糕的是,教授的试题原稿不见了。因此,他需要恢复出这些题原...原创 2019-02-06 19:47:47 · 571 阅读 · 0 评论 -
算法训练 暗恋
题目链接问题描述 同在一个高中,他却不敢去找她,虽然在别人看来,那是再简单不过的事。暗恋,是他唯一能做的事。他只能在每天课间操的时候,望望她的位置,看看她倾心的动作,就够了。操场上的彩砖啊,你们的位置,就是他们能够站立的地方,他俩的关系就像砖与砖之间一样固定,无法动摇。还记得当初铺砖的工人,将整个操场按正方形铺砖(整个操场可视为R行C列的矩阵,矩阵的每个元素为一块正方形砖块),正方形...原创 2019-03-10 10:06:03 · 447 阅读 · 0 评论 -
历届试题 九宫重排
题目链接 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。 我们把第一个图的局面记为:12345678. 把第二个图的局面记为:123.46758 显然是按从上到下,从左到右的顺序记录数字,空格记为句点。 本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动...原创 2019-03-12 14:30:38 · 518 阅读 · 0 评论 -
历届试题 剪格子 回溯法
题目链接问题描述如下图所示,3 x 3 的格子中填写了一些整数。+--*--+--+|10* 1|52|+--****--+|20|30* 1|*******--+| 1| 2| 3|+--+--+--+我们沿着图中的星号线剪开,得到两个部分,每个部分的数字和都是60。本题的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以分割为两个部分,使得这...原创 2019-03-17 10:07:20 · 257 阅读 · 0 评论 -
历届试题 蚂蚁感冒
题目链接 蓝桥杯---历届真题 题解问题描述 长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。 这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁...原创 2019-05-22 20:39:28 · 400 阅读 · 0 评论 -
历届试题 青蛙跳杯子 bfs
题目链接 蓝桥杯---历届真题 题解问题描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色。 X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去。 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙。 *WWWBBB 其中,W字母表示白色青蛙,B表示黑色青蛙,*表示空杯子。 X...原创 2019-05-13 12:01:03 · 345 阅读 · 0 评论 -
算法训练 单词接龙
题目链接 蓝桥杯 算法训练---------题解锦囊使用递归搜索,每次试着将一个可以加到后面的单词加到后面,并检查答案是不是更优。问题描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分...原创 2019-05-08 23:52:03 · 957 阅读 · 0 评论 -
2016第七届蓝桥杯国赛决赛c/c++本科B组 2、凑平方数
凑平方数把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的。比如:0, 36, 5948721再比如:10985247361, 25, 63907840, 4, 289, 15376等等…注意,0可以作为独立的数字,但不能作为多位数字的开始。分组时,必须用完所有的数字,不能重复,不能遗漏。如果不计较小组内数据的先后顺序,请问有多少...原创 2019-04-25 18:42:18 · 354 阅读 · 0 评论 -
Even Parity UVA - 11464 偶数矩阵 枚举
题目链接We have a grid of size N N. Each cell of the grid initially contains a zero(0) or a one(1). The parityof a cell is the number of 1s surrounding that cell. A cell is surrounded by at most 4 ce...原创 2019-04-29 15:46:06 · 308 阅读 · 0 评论 -
算法提高 盾神与砝码称重
问题描述 有一天,他在宿舍里无意中发现了一个天平!这个天平很奇怪,有n个完好的砝码,但是没有游码。盾神为他的发现兴奋不已!于是他准备去称一称自己的东西。他准备好了m种物品去称。神奇的是,盾神一早就知道这m种物品的重量,他现在是想看看这个天平能不能称出这些物品出来。但是盾神稍微想了1秒钟以后就觉得这个问题太无聊了,于是就丢给了你。#include <cstdio>#in...原创 2019-04-14 22:45:36 · 327 阅读 · 0 评论 -
2018蓝桥杯C语言b组国赛 4.调手表 bfs
标题:调手表小明买了块高端大气上档次的电子手表,他正准备调时间呢。在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟。大家都知道,手表只有一个按钮可以把当前的数加一。在调分钟的时候,如果当前显示的数是 0 ,那么按一下按钮就会变成 1,再按一次变成 2 。如果当前的数是 n - 1,按一次后会变成 0 。作为强迫症患者,小明一定要把手表的时间调对。如果手表上...原创 2019-04-26 14:44:59 · 500 阅读 · 0 评论 -
2018蓝桥杯C语言b组国赛 2.激光样式
第二题标题:激光样式x星球的盛大节日为增加气氛,用30台机光器一字排开,向太空中打出光柱。 安装调试的时候才发现,不知什么原因,相邻的两台激光器不能同时打开! 国王很想知道,在目前这种bug存在的情况下,一共能打出多少种激光效果?显然,如果只有3台机器,一共可以成5种样式,即: 全都关上(sorry, 此时无声胜有声,这也算一种) 开一台,共3种 开两台,只1种30台就不好算了,...原创 2019-04-25 22:12:43 · 551 阅读 · 0 评论 -
历届试题 九宫幻方 回溯法
题目链接问题描述 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。 三阶幻方又被称作九宫格,在小学奥数里有一句非常有名的口诀:“二四为肩,六八为足,左三右七,戴九履一,五居其中”,通过这样的一句口诀就能够非常完美的构造出一个九宫格来。 4 9 2 ...原创 2019-03-17 19:06:41 · 677 阅读 · 0 评论 -
算法提高 开灯游戏 回溯法
题目链接 有9盏灯与9个开关,编号都是1~9。 每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的)。 具体如下: 第一个开关控制第二,第四盏灯; 第二个开关控制第一,第三,第五盏灯; 第三个开关控制第二,第六盏灯; 第四个开关控制第一,第五,第七盏灯; 第五个开关控制第二,第四,第六,第八盏灯; 第六个开关控制第三,第五,第...原创 2019-01-28 17:40:18 · 719 阅读 · 0 评论 -
Square Destroyer UVA - 1603 破坏正方形
题目链接【分析】不难想到用迭代加深搜索作为主算法框架。搜索对象有两种:(1)每次考虑一个没有被破坏的正方形,在边界上找一根火柴拿掉;(2)每次找一个至少能破坏一个正方形的火柴,然后拿掉。两种方法各有不同的优化方法:搜索对象是正方形。应先考虑小正方形,再考虑大正方形,因为破坏完小正方形之后,很多大正方形已经被破坏了,但是反过来却不一定。还可以加入最优性剪枝,即把每个正方形看成一个顶点,有公共火...原创 2019-01-22 21:03:49 · 324 阅读 · 0 评论 -
宝箱(Zombie's Treasure Chest, UVa12325)直接枚举
题目连接:https://vjudge.net/problem/UVA-12325【分析】直接枚举:当N很大,S1和S2很小时,枚举量很大,时间复杂度为O(ax{N/S1, N/S2})。可以先将两者转化为相同体积(s1*s2),再直接给同体积下价值最大者分配。最后再进行枚举,时间复杂度为O(max{S1, S2});如果S1大,则宝物2最多只会拿S1-1个(否则可以把S1个宝物2换成S...原创 2019-01-19 15:37:49 · 603 阅读 · 0 评论 -
除法(Division, UVa 725)
输入正整数n,按从小到大的顺序输出所有形如abcde/fghij = n的表达式,其中a~j恰好为数字0~9的一个排列(可以有前导0),2≤n≤79。样例输入:62样例输出:79546 / 01283 = 6294736 / 01528 = 62【分析】枚举0~9的所有排列?没这个必要。只需要枚举fghij就可以算出abcde,然后判断是否所有数字都不相同即可。不仅程序简单,而且枚举...原创 2019-01-08 20:10:05 · 359 阅读 · 0 评论 -
最大乘积(Maximum Product, UVa 11059)枚举
输入n个元素组成的序列S,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,应输出0(表示无解)。1≤n≤18,-10≤Si≤10。样例输入:32 4-352 5 -1 2 -1样例输出:820【分析】连续子序列有两个要素:起点和终点,因此只需枚举起点和终点即可。由于每个元素的绝对值不超过10且不超过18个元素,最大可能的乘积不会超过1018,可以用long lon...原创 2019-01-08 19:59:06 · 256 阅读 · 0 评论 -
天平难题---Mobile Computing 枚举二叉树
给出房间的宽度r和s个挂坠的重量wi。设计一个尽量宽(但宽度不能超过房间宽度r)的天平,挂着所有挂坠。天平由一些长度为1的木棍组成。木棍的每一端要么挂一个挂坠,要么挂另外一个木棍。如图7-9所示,设n和m分别是两端挂的总重量,要让天平平衡,必须满足n*a=m*b。图7-9 天平 ...原创 2019-01-14 15:19:28 · 317 阅读 · 0 评论 -
分数拆分 Fractions Again UVa 10976
输入正整数k,找到所有的正整数x≥y,使得。样例输入:212样例输出:21/2 = 1/6 + 1/31/2 = 1/4 + 1/481/12 = 1/156 + 1/131/12 = 1/84 + 1/141/12 = 1/60 + 1/151/12 = 1/48 + 1/161/12 = 1/36 + 1/181/12 = 1/30 + 1/201/12 = 1/...原创 2019-01-08 17:34:47 · 186 阅读 · 0 评论 -
算法提高 寻找三位数 全排列问题
题目:http://lx.lanqiao.cn/problem.page?gpid=T189全排列问题直接使用库函数next_permutation()就好了。#include <iostream>#include <algorithm>using namespace std;int main(int argc, char** argv) { int a[...原创 2019-01-24 11:39:41 · 453 阅读 · 0 评论 -
编辑书稿(Editing a Book, UVa 11212)迭代加深搜索
题目:https://vjudge.net/problem/UVA-11212分析:本题可以用IDA*算法求解。不难发现n≤9时最多只需要8步,因此深度上限为8。IDA*的关键在于启发函数。考虑后继不正确的数字个数h,可以证明每次剪切时h最多减少3,因此当3d+h>3maxd时可以剪枝,其中d为当前深度,maxd为深度限制(3)。如何证明每次剪切时h最多减少3呢?如图7-19所示...原创 2019-01-18 19:38:16 · 314 阅读 · 0 评论 -
CODE[VS]1288 埃及分数 迭代加深搜索
题目描述:http://codevs.cn/problem/1288/因为深度没有明显的上界,而且加数的选择在理论上也是无限的。故采用迭代加深搜索(iterative deepening):从小到大枚举深度上限dep,每次执行只考虑深度不超过dep的结点。这样,只要解的深度有限,则一定可以在有限时间内枚举到。#include <iostream>#include <c...原创 2019-01-17 18:20:24 · 259 阅读 · 0 评论 -
带宽(Bandwidth, UVa 140)
给出一个n(n≤8)个结点的图G和一个结点的排列,定义结点i的带宽b(i)为i和相邻结点在排列中的最远距离,而所有b(i)的最大值就是整个图的带宽。给定图G,求出让带宽最小的结点排列,如图7-7所示。 下面两个排列的带宽分别为6和5。具体来说,图7-8(a)中各个结点的带宽分别为6, 6,1, 4, 1, 1, 6, 6,图7-8(b)中各个结点的带宽分别为5, 3, 1, ...原创 2019-01-11 12:41:59 · 852 阅读 · 0 评论 -
生成可重集的排列----C++STL库函数next_permutation使用和自己实现
C++STL库函数next_permutationSTL中的next_permutation 函数和 prev_permutation 两个函数提供了对于一个特定排列P,求出其后一个排列P+1和前一个排列P-1的功能。使用方法:#include<cstdio>#include<algorithm> //包含next_permutationusing nam...原创 2019-01-08 23:26:46 · 538 阅读 · 0 评论 -
旋转游戏(The Rotation Game,, UVa1343)迭代加深搜索
题目:https://vjudge.net/problem/UVA-1343结构实现技巧:用数组直接记录相应位置的下标,从而减少了每次赋值给相应数组。#include <iostream>using namespace std;int a[24],maxd;int line[8][7]={ { 0, 2, 6,11,15,20,22}, // A { 1, 3,...原创 2019-01-20 13:35:37 · 248 阅读 · 0 评论 -
八数码问题------三种判重方式 状态空间搜索
编号为1~8的8个正方形滑块被摆成3行3列(有一个格子留空),如图7-14所示。每次可以把与空格相邻的滑块(有公共边才算相邻)移到空格中,而它原来的位置就成为了新的空格。给定初始局面和目标局面(用0表示空格),你的任务是计算出最少的移动步数。如果无法到达目标局面,则输出-1。样例输入:2 6 4 1 3 7 0 5 88 1 5 7 3 6 4 0 2样例输出:31【分析】...原创 2019-01-15 11:33:41 · 4427 阅读 · 0 评论 -
万圣节后的早晨(The Morning after Halloween, UVa1601)优化转移代价
题目:https://vjudge.net/problem/UVA-1601优化转移代价:因为要走的节点不止一个,容易超时,故需优化转移代价,将迷宫转化为图(即邻接矩阵转化为邻接表),减少判断。之前用的结构体实现储存状态,现在改成了编码、解码来储存,觉得能够节省空间挺好的,但是之后发现运行时间变长了,可能是每次编码、解码都要调用运算的原因吧。代码如下#include <iostre...原创 2019-01-16 19:47:57 · 561 阅读 · 0 评论 -
蓝桥杯 基础练习 2n皇后问题 回溯法
题目链接 蓝桥杯---基础练习 题解问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。方法一:回溯法,数组记录判断(数组解释具体详见算法训练 王、后传说...原创 2019-01-15 20:43:06 · 1736 阅读 · 0 评论 -
素数环(Prime Ring Problem, UVa 524)递归枚举,回溯
输入正整数n,把整数1, 2, 3,…, n组成一个环,使得相邻两个整数之和均为素数。输出时从整数1开始逆时针排列。同一个环应恰好输出一次。n≤16。样例输入:6样例输出:1 4 3 2 5 61 6 5 2 3 4#include <iostream>#include <cmath>using namespace std;bool isPrime[3...原创 2019-01-10 11:25:20 · 322 阅读 · 0 评论 -
快速幂计算(Power Calculus, UVa1374)迭代加深搜索
题目:https://vjudge.net/problem/UVA-1374 【分析】使用迭代加深搜索,d表示当前深度,maxd表示深度上限,则如果当前序列最大的数乘以2maxd-d之后仍小于n,则剪枝。另外,为了尽快接近目标,不应该“任选”两个数,而应该先选较大的数,并且先试加法再试减法(6)。这样做可以在最后一次迭代(即找到解的那次迭代)中比较快地找到解,从而终止整个搜索过程,而不需要...原创 2019-01-21 14:05:24 · 330 阅读 · 0 评论