随笔分类 -  搜索

摘要:题意:找出n的最小倍数,要求这个倍数十进制由1和2组成。看了discuss才知道确实可以用DP来做:令res[i][j]表示前i位对n取余为j是否可以得到。res[i][(10%n*j+1)%n]=res[i-1][j];res[i][(10%n*j+2)%n]=res[i-1][j];用到(a * b) % n=(a % n * b % n) % n;假如我们知道res[i][j]按照上面的公式顺着推很容易得到res[i+1][(10%n*j+1)%n]和res[i+1][(10%n*j+2)%n]的值,但是逆着推就不容易了。不管怎么说还是和01背包一个性质的。但是,提交后MLE,由于找路径 阅读全文
posted @ 2012-05-19 21:30 书山有路,学海无涯 阅读(320) 评论(0) 推荐(0) 编辑
摘要:题目大意:给出三个数n,k,m,n可以+m、-m、*m、%m,每次求出的结果,再用n保存起来,%的定义如下:若n=x*m+q 满足m>1 && q>=0 则q为n%m的值(和平常取余不一样)。求最少多少步使得n的初始(n+1)%k等于当前的 n%k,并输出操作符顺序,若有多种解则输出操作符序列最小的,最小的定义就不说了。WA了n次不知道为何,后来看了大牛的分析才得知%的出现是可以推算出来的。若不加访问标志的话,复杂度必然会高,若果我们将每次取得的n值,做下n=n%k的话那么我们就可以定义一个访问标志数组。那么这么做对不对呢?我们先看一下 ((n ope m)%k o 阅读全文
posted @ 2012-03-01 08:55 书山有路,学海无涯 阅读(458) 评论(0) 推荐(0) 编辑
摘要:今天也算是练习了一下记忆化搜索,这道题也包含很多值得注意的地方1、 输入的两个数不一定前者比后者大2、 变换的过程中可能会超出int范围3、 为了不超时可以作下预处理#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define MAXINT 1000001int res[MAXINT];int dfs(long long t){ if(t<=1) return 1; if(t<=MAXINT && res[t]!=0) return r 阅读全文
posted @ 2012-02-28 18:17 书山有路,学海无涯 阅读(181) 评论(0) 推荐(0) 编辑
摘要:一道很好的搜索题目,但是好久没有弄懂题意,题意大致是这样的:在一个地图上给出自己的位置‘Y’,目的位置‘T’,两种墙‘S’和‘B’,还有河‘R’,以及空地‘E’。‘S’和‘R’是不能穿过的,‘B’可以被炸毁但需要一个单位时间,每走一步也需要单位时间。求从初始位置到目的位置至少需要多长时间。dfs和bfs都可以来搜索,dfs复杂度比较高,但可以用记忆化搜索,我选择的是bfs,因为炸毁墙需要一个单位时间,所以按照平常的广搜是不行的,只能一各单位时间一个单位时间的来走,不能一次走两个单位时间。所以每次到达‘B’时,需要等待一个时间。#include<iostream>#include&l 阅读全文
posted @ 2012-02-28 16:49 书山有路,学海无涯 阅读(658) 评论(0) 推荐(0) 编辑
摘要:题意:给出两串,两串顺序不变看能否组成第三个串。此题深搜和DP都能解决:深搜的话需要几个强有力剪枝条件1、 第三个串最后一个字符要么是串1的最后一个字符,要么是串2的最后一个字符2、 按照串1的顺序对串3进行搜索,若不匹配则该字符必是串2的下一个字符。#include<iostream>#include<cstdio>#include<cstring>using namespace std;char first[202],second[202],third[402],Left[401];int sign[402];bool flag;int check(){ 阅读全文
posted @ 2012-02-26 21:21 书山有路,学海无涯 阅读(3098) 评论(2) 推荐(1) 编辑
摘要:大致题意也就是给出大正方形和多个小正方形的边长,用多个小正方形能否拼成一个大正方形。这是一道搜索的题目,如果暴搜的话,边长为23左右就出不来结果过了。看了大牛的思想有很多方法可以剪枝的。1、 小蛋糕用一个cake[11]的数组来存,cake[i]表示边长为i的蛋糕有cake[i]个,这样可以避免相同的蛋糕多次判断;2、 用一维的col[41]来代替二维数组,col[i]表示第i行已经用了前col[i]列;3、 遇到合适情况直接返回,不必要再往下搜索了;4、 所有的小蛋糕面积和等于大蛋糕面积;接下来说怎么搜索吧;1、在col[]数组中找出使用的最小的行minRow,同时也就找出了下一次方小蛋糕的 阅读全文
posted @ 2011-10-31 11:37 书山有路,学海无涯 阅读(1470) 评论(1) 推荐(0) 编辑

点击右上角即可分享
微信分享提示