
暴力搜索
playwfun
宁静致远
展开
-
HDU 3848
D - CC On The TreeTime Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64uSubmit Status Practice HDU 3848DescriptionCC lives on the tree which has N nodes.On原创 2014-08-20 15:48:12 · 641 阅读 · 0 评论 -
UVA - 818(暴力+分析)
本题虽然解题方法简单,但是一直wrong了很多遍。首先,要用最少的open来拼成链状,直接暴力枚举(2^n)种可能性,每种的判断,是关键,首先把这些open的环拿出,剩下的不能有环而且不能存在度数大于2的节点。最后一个条件就是,剩下的联通分量要不超过open环个数加1。剩下就是暴了。首先,错误之处,对dfs时数组的更改,一定要使用记忆数组;判断有没有环只需把每条边正反存两遍原创 2015-03-17 19:49:25 · 873 阅读 · 0 评论 -
UVA - 810 (A Dice problem 搜索)
这题有点坑,给的标准展开图中3和4的位置弄反了。除了这个地方之外,只能说自己太笨了,这个题目已经明显提示一个骰子两个面足够确定骰子是唯一的。所以状态就是坐标+顶面数字+前面数字。总共最多为row*column*24.状态转移是四。很快就可以解出。#include #include #include #include #include #include #include原创 2015-03-12 19:51:12 · 504 阅读 · 0 评论 -
UVA - 690(搜索+剪枝)
本题确实没什么好办法,只能暴力搜索,不过要加枚举剪枝和展望剪枝。枚举优化,就是事先试一下所有可行移动位置,搜索是只用这几个就行。展望及当前已经移动数加上剩下的最低估计也比当前最优解大,剪枝。还有本解不是最优的,看到有高手用位运算来模拟该搜索过程比纯属组快四倍。还有用位运算模拟,往前添加尝试不好办啊,若一直往前走数大的存不下,可以将当前的图往后移动,在前面添加。#include原创 2015-03-13 14:25:56 · 1246 阅读 · 4 评论 -
山东省第三届省赛(Mine Number)
二进制暴力枚举,加唯一性限定。#include #include #include #include #include #include #include #include #include #include #include #include #define mem(a, val) memset((a), (val), sizeof (a))#define all(原创 2015-04-12 21:17:21 · 349 阅读 · 0 评论 -
POJ 2435(打印最优解方案)
#include #include #include #include #include using namespace std;typedef long long LL;#define rep(i,n) for(int (i)=0;(i)<(n);i++)#define Rep(i,n) for(int (i)=1;(i)<=(n);i++)const int maxn = 9原创 2015-04-08 08:16:25 · 596 阅读 · 0 评论 -
UVA - 11127(搜索)
直接二进制暴,因为分析一下可行解较少。用位运算可防卡姿势。#include #include #include #include #include using namespace std;vector ans;inline int judge(int v){ ans.push_back(v); for(int i=1;i*3<=ans.size();i++){原创 2015-04-14 13:54:37 · 426 阅读 · 0 评论 -
UVA - 10396(简单暴力)
直接暴a,然后dfs可行b,求b时如果中间值超过上限则要剪枝#include #include #include #include #include #include using namespace std;int max_[3]= {9999,999999,99999999};int lim[3] = {2,3,4};int st[3] = {10,100,1000};原创 2015-04-16 13:31:19 · 464 阅读 · 0 评论 -
HDU 5094(状态压缩搜索)
给了一个图,让从1,1出发走到(n,m)路上会有一些门和墙和钥匙,墙过不去,门只能用对应的key打开,求最短路,要是种类最多10种。只需定义 状态 (x,y,s) 为当前位置的情况下有什么钥匙,不bfs就可以了。·有些许不解,解法如此简单。原创 2015-04-25 12:30:32 · 718 阅读 · 0 评论 -
HDU - 4821 (暴力的复杂度计算)
本题目意思:给定一个长度为1E5的串,给定N,M,让统计所有的连续子串,满足串长为N*M,而且这N个长为M的串两两不相同,输出个数。分析:本题目明显使用哈希来做的,因为在LONG LONG 内散列不超过 1E5个子串,出现冲突的概率极低。然后不能从头暴力算出第一个长为N*M的串每个长M的哈希值,然后递推计算后面的每个长为N*M串的hash值,这样复杂度为(len - N*M)*(N原创 2015-08-09 15:11:59 · 1179 阅读 · 0 评论 -
HDU - 4784(状态设计搜索)
因为数据较小,可以考虑搜索。主要的维度为当前位置p,当前消耗时间t,当前持有的盐b,当前所在宇宙k。最大状态数为100*200*5*6,如果直接用bfs爆搜,因为状态间的边权不是统一的1,那么bfs第一次更新到的点不一定是最优值,所以每个状态需要多次被更新,且多次进入队列,会超时。但有了时间这一维度,就产生了不同,加入队列的节点,按t值小的先出队列,那么每个节点出来之后就不会被再更新,原创 2015-08-25 09:24:24 · 506 阅读 · 0 评论 -
HDU - 4277(暴力加+hash)
本题目的裸暴力复杂度为sum = C(n,k)*2^K = (1 + 2)^N; 最大为 3^15为1e7左右,显然暴力加点剪枝就过的题目。那么根据三角形的限制条件剪一剪,再加上hash就很快了。#include #include #include #include #include #include #include #include using namespace原创 2015-08-25 18:45:45 · 337 阅读 · 0 评论 -
HDU - 4090(暴力剪纸题目,)
题目意思不说了,模拟都不怎么会描述,本题目,直接dfs暴力哪一个点该修改然后搜索即可,剪枝两个 : 一,对于联通的点,只需尝试其中一个(避免重复搜索)。 二,记录当前各种颜色剩余值,若当前所得值+最大期望可得这份代码神奇之处是 G++能过,C++不能过。#include#include#include#include#include#include#include#i原创 2015-08-19 20:15:43 · 382 阅读 · 0 评论 -
HDU 5506(暴力角度题目)
题意:给定最多30个集合让划分成L个部分(每部分由若干完整集合组成,LL部分且每个部分的集合最少有一个公共元素。分析:这样的题目用确定一个基本点的方法,进行枚举,首先1集合必定在L个集合中的一个,那么可以直接限定它出现在第一个集合,那么枚举10个元素到底哪一个值是公共的,然后标记所有有这个元素的集合,再找到第一没有这个元素的集合继续如此,如果递归这样的枚举是高效的最多5层,每层原创 2015-10-28 08:09:51 · 525 阅读 · 0 评论 -
HDU 4876(就是暴)
题意: 给定n(n思路: 怎么想都会超时,就用最暴力的方法了,剪纸 + 减少枚举, 首先可以先将C(n,k)中可选的数的组合枚举出来,我们发现不需要枚举出所有的这k个数的排列依次判断,因为是环状 , 可以从K!降到(K -1)! 然后跟据当前获取的最大值做可行性剪枝。 #include #include #include #include using na原创 2016-04-15 10:35:29 · 447 阅读 · 0 评论 -
HDU 3759(暴力映射)
这个题目就是将手里的5张牌映射成一个个不同的等级这种映射题目,很明显第一个node,然后再定义一个比较函数,然后排序即可。需要注意的是:一些预处理的值必须 , 再return之前重用一个node必须保证不相互干扰。#include #include #include #include #include #include #include #include #in原创 2016-05-09 21:11:04 · 789 阅读 · 0 评论 -
UVA - 12107(搜索)
本题主要难点在判断枚举出来的式子是否成立,本人采用对一个固定式枚举等号左面可改动位置的值然后生成乘积与后面的串匹配时间最坏需要10^4(前四位都为可改动位)判断是否成立,然后用迭代加深搜索枚举上限作为主算法,{ 每次采用逐位确定。 特别注意最后拷贝串的改动。}#include #include #include #include #incl原创 2015-03-16 17:33:49 · 991 阅读 · 0 评论 -
UVA - 11210 Chinese Mahjong(注意暴力搜索时排除排列重复搜索)
为了使得在暴力dfs判断选完将之后剩下的牌是否构成刻子和顺子;要用now【34】数组记录每张牌的个数,并且一直从有牌的内个最小编号牌判断其是否属于某个刻子或顺子;而且他所属顺子一定以他为最小值;#include #include #include #include #include using namespace std;typedef long long LL;const原创 2014-12-29 21:22:41 · 480 阅读 · 0 评论 -
UVA - 211(网格转化为线性dfs)
#include #include #include #include using namespace std;const int N = 7;const int M = 8;int maze[N*M];int image[N*M],id[N][N];bool use[M][M],vis[N*M];int ALL;void print_ans(){ ALL++;原创 2014-10-09 17:21:23 · 549 阅读 · 0 评论 -
UVA - 1601(双向BFS)
使用双向BFS最大的优点在于原创 2014-10-10 13:49:52 · 2315 阅读 · 2 评论 -
UVA - 1343(IDA*(迭代加深搜索)为什么会很快原因待解 )
#include #include #include #include using namespace std;const int a[8][7]={{ 0, 2,6,11,15,20,22}, //ABCDEFGH in order{ 1,3,8,12,17,21,23},{10, 9,8,7,6,5,4},{19,18,17,16,15,14,13},{23,21,17原创 2014-10-12 19:23:02 · 1327 阅读 · 0 评论 -
UVA - 11214(迭代加深)
暴力搜索 因为(最大深度较小)所以才原创 2014-10-13 11:07:59 · 901 阅读 · 0 评论 -
UVA - 11212(Editing a Book)
刘汝佳原创 2014-11-18 19:42:20 · 1192 阅读 · 0 评论 -
UVA - (单点BFS , 多源点同时加入queue)
#include #include #include #include #include #include #include using namespace std;#define INF 11000000const int maxn = 1110;char maze[maxn][maxn];int n,m,Time[maxn][maxn],vis[maxn][maxn],s原创 2014-10-31 20:45:29 · 559 阅读 · 0 评论 -
UVA - 1533 (Moving Pegs)
思路简单,把状态看成一个长原创 2014-11-20 21:49:26 · 617 阅读 · 0 评论 -
UVA -12569 (BFS+状态压缩)
#include #include #include #include #include #include using namespace std;const int N = 491520+10;const int maxn = 15;struct node{int s,x;node(int s=0,int x=0):s(s),x(x){}}q[N],act[N];原创 2014-11-20 21:47:08 · 1077 阅读 · 3 评论 -
UVA - 1102(vector没有find用法)
#include#include #include #include #include #include using namespace std;const int maxn = 200+10;const int maxm = 50*4+10;int maze[maxn][maxm],n,m,vis[maxn][maxm];char str[maxn*2];struct原创 2014-10-26 14:21:07 · 534 阅读 · 0 评论 -
uva - 12325(二分复杂度做题)
#include #include #include #include #include #include using namespace std;#define LL long longconst int lim = 110000;LL s1,v1,s2,v2,n;int main(){ int T,kase=1; scanf("%d",&T); w原创 2014-12-02 13:31:54 · 678 阅读 · 0 评论 -
UVA - 1602(Polyomino的存储和判重)
#include #include #include #include using namespace std;struct Cell{int x,y;Cell(int x=0,int y=0):x(x),y(y){}bool operator < (const Cell& rhs) const{return x < rhs.x || x==rhs.x && y< rhs.y;原创 2014-12-02 15:39:56 · 1619 阅读 · 0 评论 -
UVA 12113 - Overlapping Squares
#include #include #include #include #include using namespace std;const int maxn = (1<<9);int a[9][8]={{1,3,9,13,18,19,21,22}};int clean[9][4]={{10,11,12,20}};void init(){ int kk=1; for(i原创 2014-12-03 15:28:18 · 1408 阅读 · 0 评论 -
uva - 10730 - Antiarithmetic?(暴力枚举)
本题直接暴力枚举所有非法三元组判断即可;但当10000 的时候非法三元组个数为 24599000;目前估计同时满足这么多条件的n长串很少,导致程序秒过;或者说句很水;#include#include#include#include#include#include #include#includeusing namespace std;typedef long long L原创 2014-12-27 17:42:15 · 728 阅读 · 2 评论 -
UVA - 10317 Equating Equations(普通的暴力枚举 dfs枚举 c(n,m))
#include #include #include #include #include #include #include #include using namespace std;typedef long long LL;char str[100000];vector Punct;vector dig;int m ;void solve(){ Punct.c原创 2014-12-30 16:02:34 · 570 阅读 · 0 评论 -
UVA - 1352(注意暴的角度)
本题旋转方法很特别,先确定右旋和上旋,则每个面朝上都可以通过这两种操作实现;再者,是暴力的角度,要从最优解出发,肯定可以确定的是每个立方体都为24种旋转方案中的一种;则不如取第一个 只采用 24种旋转方式中的一种,然后枚举其他立方体的旋转方式,然后既然状态确定的情况下,就好统计了,每个面取n个立方体出现最多的内个颜色;最坏复杂度 4 * 24^4; 一百万左右;#include原创 2014-12-29 20:12:33 · 545 阅读 · 0 评论 -
HDU 3760(最短路思路)
先倒着从n bfs一遍求出bfs树每层的节点,然后从1贪心的走回来就行了这个贪心用两个queue即可实现。#include #include #include #include #include using namespace std;typedef long long ll;typedef pair pii;#define rep(i , n) for(int i =原创 2016-05-10 19:36:12 · 902 阅读 · 0 评论