随笔分类 -  搜索

摘要:题目1 : 焦距时间限制:2000ms单点时限:1000ms内存限制:256MB描述一般来说,我们采用针孔相机模型,也就是认为它用到的是小孔成像原理。在相机坐标系下,一般来说,我们用到的单位长度,不是“米”这样的国际单位,而是相邻像素的长度。而焦距在相机坐标系中的大小,是在图像处理领域的一个非常重要... 阅读全文
posted @ 2014-04-19 17:29 yejinru 阅读(363) 评论(0) 推荐(0)
摘要:题目:给出一个图,问最少删除多少个点,使得从点1到点n经过的点数超过k个。分析: 上网搜了一下,发现很多人用网络流做的,发现我不会。再后来看到这篇说网络流的做法是错的,囧。 后来发现点数有点少,直接上爆搜。每次搜索前先跑一遍最短路,判断是否满足,如果满足更新答案,退出。 否则,在求最短路时记录一下路径,然后枚举删除最短路上的点,继续搜。 第一次写时,记录路径用的是全局变量,每次搜下一层的时候就会变,发现居然也A了。。。 我试了一下,发现n不会等于1。。。#include #include #include #include #include #include #include #in... 阅读全文
posted @ 2013-09-05 16:16 yejinru 阅读(290) 评论(0) 推荐(0)
摘要:177. Squaretime limit per test: 2.5 sec.memory limit per test: 65536 KBinput: standardoutput: standardYou have given the square NxN on a checkered sheet. Size of each cell is 1x1, (1, 1) is leftmost top corner and (N, N) is rightmost bottom corner.Initially all cells are white.There are M repainting 阅读全文
posted @ 2013-04-25 12:03 yejinru 阅读(270) 评论(0) 推荐(0)
摘要:通過這一體說說三分的做法。题目列表 > 集会时间限制: 2000ms 内存限制: 256MB描述在一条河的一侧,分布着 N 个村庄。这些村庄平日里需要一些贸易往来,然而商人们来回走遍每一座村庄是非常辛苦的,于是他们决定每个月都在河边举行一次集会,大家都来集会上购买需要的物品。然而在集会地点的选择上,大家却有分歧,因为谁都不愿意集会的地点离自己村庄非常远。经过一番激烈的讨论之后,大家决定要将集会地点挑选在这样一个位置:它离最远的村庄的距离要尽可能的近。我们把河看做一条足够长的直线,河岸就是平面坐标系上 y = 0 的这条线,y f(x2),如左圖,則把l = x1 否則,r = x23.重 阅读全文
posted @ 2013-04-14 17:05 yejinru 阅读(378) 评论(6) 推荐(1)
摘要:吉哥系列故事——完美队形IITime Limit: 3000/1000 MS (Java/Others)Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 354Accepted Submission(s): 99Problem Description 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要求,则就是新的完美队形: 1、挑出的人保持原队形的相对顺序不变,且必须... 阅读全文
posted @ 2013-03-24 18:19 yejinru 阅读(307) 评论(0) 推荐(1)
摘要:题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1860/* * BZOJ 1860: [Zjoi2006]Mahjong麻将 * * 分析: * 据说有DP解,暂时没想出来。。。直接暴力dfs+hash * dfs(pos,two,state):pos表示当前的位置,two表示是否有对,state表示状态 * 暴力枚举四种情况,然后每次进行搜索前进行hash判重。 * hash判重时使用像池子法一样的方式解决冲突问题。 * * */#include <cstdio>#include <iostream>#inclu 阅读全文
posted @ 2012-12-30 08:07 yejinru 阅读(377) 评论(0) 推荐(0)
摘要:1080. Map ColoringTime Limit: 1.0 secondMemory Limit: 16 MBWe consider a geographical map withNcountries numbered from 1 toN(0<N<99). For every country we know the numbers of other countries which are connected with its border. From every country we can reach to any other one, eventually cross 阅读全文
posted @ 2012-09-10 22:39 yejinru 阅读(378) 评论(0) 推荐(0)
摘要:题目: 给出n条边,每条边有一定的长度,现在要用所有的边围成三角形,问能够围成多少个不同的三角形(三边至少有一边不等)。 分析: 对三角形进行编号,A,B,C三边,所有的边必定在其中的一条上面,只要三进制压缩枚举每条边所在的位置即可,也可以直接 dfs枚举即可。另外注意到第一根木棍肯定在三角形的一条边上,所以根据对称关系,可以直接把他放在a号边即可View Code #include <cstdio>#include <cstring>#include <set>#include <algorithm>using namespace std;co 阅读全文
posted @ 2012-09-08 18:31 yejinru 阅读(947) 评论(3) 推荐(1)
摘要:/*题目: 马能否从(1,1)开始走完所有的格点,并且所走的格点之前都没有走过分析: dfs+回溯,分8个方向走,用Next[i,j]记录位置(i,j)的下一位的所在位置*/#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int X = 30;int n,m;int Next[X][X];bool use[X][X];int dir[8][2] = {{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1} 阅读全文
posted @ 2012-05-28 18:38 yejinru 阅读(162) 评论(0) 推荐(0)
摘要:/*题目: 该文符合以下三条语法为正确: 1.单一的单词p到z,大写字母:N, C, D, E, I 2.如果字符串s书写正确,则Ns同样正确。 3.若字符串s,t正确的话,则Cst, Dst, Est, and Ist同样正确分析: 递归字符串即可。若当前的字符串的长度为1,符合语法1的话,返回正确。若长度大于1的话, 若当前首字母为N,递归从第二位开始的该字符串,若成功,返回成功。当首字母为C, D, E, I, 若字符串能够分成三个部分X(C, D, E, I),s,t的话,返回成功。 分解字符串的函数可以用string中的substr函数,比如: s = "12345&quo 阅读全文
posted @ 2012-05-01 16:27 yejinru 阅读(360) 评论(0) 推荐(0)
摘要:/* 题目:给出两种图形的像素表示方法,现在给出其中一种,求另一种的像素表示方法。分析:BFS的思想 */#include <iostream>#include <cstring>#include <cstdio>#include <queue>#include <vector>using namespace std; const int X = 15; struct node{ int x,y;}; int dir[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};//右上左下的方向偏移量char d[] = 阅读全文
posted @ 2012-05-01 12:47 yejinru 阅读(209) 评论(0) 推荐(1)
摘要:/*题目: 冰球游戏,每次都得需要往左右前后移动相应的步数,只有遇到石块才会停止在石块前,不然的话 就要出界。问如何从出发点移动冰球使它到达终点,若不能输出-1,可以的话输出最小的移动次数。 另外超出十次还没移动到终点的话,也算输分析: 由于长和宽都最大只有20,另外也同样只有十次而已,所以可以用深搜来做。每次先判断需要移动的 到哪个位置,然后判断到达终点时的总移动次数是否大于10,没有则更新答案。另外需要注意的是, 每次移动时都需要先对该位置碰到的石块置空,然后递归搜索该位置是否能到达终点,递归完了之后 需要对地图位置置为1,代表原来的位置为石块。*/#include <iostrea 阅读全文
posted @ 2012-04-26 17:28 yejinru 阅读(189) 评论(0) 推荐(0)
摘要:/*题目: 就是所在矩形中有一些外星人,一些人组队打怪去,可以分很多支队,问这些队一共所需的 最少移动步数分析: 由于可以分很多队,所以可以看做是从起点出发求最小生成树(其实有无起点一样,MST肯定 包括起点),于是问题转换为求最小生成树。怎样处理点与点之间的距离。其实每两个点之间 肯定存在通路,而任两点之间的最小直接距离可以通过bfs求到,于是可以通过枚举所有的点 (即外星人和起点)到另外的点(还是外星人和起点)的距离。具体实现看代码*/#include <iostream>#include <cstring>#include <cstdio>#inclu 阅读全文
posted @ 2012-04-09 22:37 yejinru 阅读(167) 评论(0) 推荐(1)
摘要:/*题目: 象棋中马如何走到指定地点分析: BFS题,分8个方向搜就行 具体的图型可以看看poj1915题的8个方向,理解BFS后很容易写出*/#include <iostream>#include <cstring>#include <queue>#include <cstdio>using namespace std;#define X 310int sx,sy,ex,ey,n;bool visit[X][X];struct node{ int x,y,step;};bool check(int x,int y){ if(x<1||y& 阅读全文
posted @ 2012-03-20 14:35 yejinru 阅读(158) 评论(0) 推荐(0)
摘要:此方法是看了别人的题解的,利用像dp的思维做,f[m][n] = f[m][n-1]+f[m-n][n],其中f[m][n]表示m个水果n个盘子时总的放的方法数,因为f[m][n]总可以通过有空盘子或者没空盘子来放,f[m][n-1]表示有空盘子的情况,而f[m-n][n]表示没有空盘子的情况,思路非常巧妙#include <iostream>using namespace std;int ans;int dfs(int m,int n){ if(m==1) return 1; if(m<0) return 0; if(n==1) return 1; return dfs(m 阅读全文
posted @ 2012-03-20 14:33 yejinru 阅读(162) 评论(0) 推荐(0)
摘要:/*题目: 填充数独游戏分析: 先从后面开始搜,也就是从第八十个开始搜 1、如果一个小的方格内已经包含了非零的数,则继续向下搜 2、如果一个小的方格内是一个零数,也就是还没有放入相应的数,则对其从零到九开始尝试 3、对每一个数的尝试,检查其合法性:在其所在的3*3方格内是否合适;在此行是否合适,在此列是否合适 4、如果经过以上条件可以的话那么这个数字就可以放在此小方格上,然后继续进行搜索。*/#include <iostream>#include <cstring>#include <string>using namespace std;int a[10][ 阅读全文
posted @ 2012-03-20 14:28 yejinru 阅读(214) 评论(0) 推荐(0)
摘要:终于靠自己A了一道比较难的题了(n_n)据说是减枝题,不过我的剪枝还有待提高,以下做法竟然差点time limitted(985MS)我自己的思路:DFS搜索题,按当前需要构造的分数值,当前分母的总乘积,已经有了的个数,上一层分母值进行搜索,当遇到已经有了的个数等于a时,返回假,否则从上一层的分母值开始为下一个分数进行检查是否满足条件,满足的话答案加一#include <iostream>#include <cmath>using namespace std;#define X 1e-8int p,q,a,n;int ans;bool dfs(double cs,int 阅读全文
posted @ 2012-03-20 14:27 yejinru 阅读(295) 评论(0) 推荐(0)
摘要:/*题目: 求最少时间从(0,0)走到(4,4)的路径分析: 纯粹BFS题目,不过需要打印路径,可以用数组记录当前的坐标的上一个坐标, 因为BFS构造出一棵BFS最优生成树,每一个节点的父母节点都是唯一的,具体 参考算法导论。。。*/#include <iostream>#include <cstring>#include <cstdio>#include <queue>using namespace std;#define X 6int map[X][X],pre[X][X];bool visit[X][X];struct node{ int 阅读全文
posted @ 2012-03-01 22:02 yejinru 阅读(203) 评论(0) 推荐(0)
摘要:第一道懂的深度优先搜索题,找图中八连块的个数#include <iostream>#include <cstring>using namespace std;#define X 100int visit[X][X];int a[X][X];void dfs(int x,int y) //深度优先搜索{if(visit[x][y]||!a[x][y]) //如果是白色或者是遍历过的return;visit[x][y] = 1; //遍历过的标记为一dfs(x-1,y-1); dfs(x-1,y); dfs(x-1,y+1); //递归遍历周围dfs(x,y-1); dfs 阅读全文
posted @ 2012-02-29 22:31 yejinru 阅读(154) 评论(0) 推荐(0)
摘要:题目:三维迷宫题:分析:在二维迷宫上多了上下搜索,求最优解,用BFS做,用队列储存上一个搜索过的节点,在下一次搜索时把删除最先入队的那个就行,另外得储存上一次的坐标,可以直接把x,y,z坐标分别乘以10000,100,1就行(注意到数据不超过30),把它作为新元素加入到队首中,借助数组判断是否已经走过,可以节省大量时间#include <iostream>#include <cstring>#include <queue>#include <string>#include <cstdio>using namespace std;#de 阅读全文
posted @ 2012-02-29 22:22 yejinru 阅读(206) 评论(0) 推荐(0)