luogu 1731 搜索剪枝好题】的更多相关文章

搜索剪枝这个东西真的是骗分利器,然鹅我这方面菜的不行,所以搜索数学dp三方面是真的应该好好训练一下 一本通的确该认真的刷嗯 #include<bits/stdc++.h> using namespace std; ],n,m,ans; inline void dfs(int p,int s,int v,int h,int r){ ){ if(v==n) ans=min(ans,s);return;} ]>n) return; *(n-v)/r+s>=ans) return; int…
poj  1568:Find the Winning Move   [迭代博弈+搜索+剪枝] 题面省略... Input The input contains one or more test cases, followed by a line beginning with a dollar sign that signals the end of the file. Each test case begins with a line containing a question mark and…
P3393 逃离僵尸岛 题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入就会被感染TAT...所以不能进入.由其中任意城市经过不超过S条道路就可以到达的别的城市,就是危险城市.换句话说只要某个没有被占城市到某个被占城市不超过s距离,就是危险. 小a住在1号城市,国际空港在N号城市,这两座城市没有被侵略.小a走每一段道路(从一个城市直接到达另外一个…
传送门 Description Input 包含四行. 第一行有一个正整数 (N≤26). 后面的三行,每行有一个由大写字母组成的字符串,分别代表两个加数以及和.这3个字符串左右两端都没有空格,从高位到低位,并且恰好有N位. Output 一行,即唯一的那组解. 解是这样表示的:输出NN个数字,分别表示A,B,C,-所代表的数字,相邻的两个数字用一个空格隔开,不能有多余的空格. Sample Input 5 ABCED BDACE EBBAA Sample Output 1 0 3 4 2 IN…
题目链接:hdu 5469 Antonidas 题意: 给你一颗树,每个节点有一个字符,现在给你一个字符串S,问你是否能在树上找到两个节点u,v,使得u到v的最短路径构成的字符串恰好为S. 题解: 这题可以用树的分治+字符串hash,不过搜索+剪枝写的好一样可以过,而且跑的时间和正解差不多. 搜索的做法就是先随便找一个点当作根,然后预处理一下最大的深度,然后枚举起点,开始向各个方向遍历,如果这个点的最大深度小于未匹配的字符串长度,那么久向父亲方面搜. #include<bits/stdc++.h…
题目描述 某地发行一套彩票.彩票上写有1到M这M个自然数.彩民可以在这M个数中任意选取N个不同的数打圈.每个彩民只能买一张彩票,不同的彩民的彩票上的选择不同. 每次抽奖将抽出两个自然数X和Y.如果某人拿到的彩票上,所选N个自然数的倒数和,恰好等于X/Y,则他将获得一个纪念品. 已知抽奖结果X和Y.现在的问题是,必须准备多少纪念品,才能保证支付所有获奖者的奖品. 输入输出格式 输入格式: 输入文件有且仅有一行,就是用空格分开的四个整数N,M,X,Y. 输出格式: 输出文件有且仅有一行,即所需准备的…
搜索的经典题. 我们要求木根的最小长度,就要是木根的数量尽可能多,可以发现木根的长度一定可以整除所有小木棒的总长度,从小到大枚举这个可能的长度,第一次有解的就是答案. 关心的状态:当前正在拼哪根木棍,拼到什么长度了,以及每个小木棒的使用情况. 考虑剪枝: 1.优化搜索顺序:小木棒长度从大到小枚举: 2.排除等效冗杂:(1)拼接某根木棍时,小木根长度从大到小枚举,不必每次都将每个都遍历: (2)如果拼接是一种长度不行,那么相同长度也不行: (3)长度为0时递归分支返回失败,直接回溯: (4)长度+…
Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8435    Accepted Submission(s): 5248 Problem Description There is a rectangular room, covered with square tiles. Each tile is colore…
4325: NOIP2015 斗地主 Time Limit: 30 Sec  Memory Limit: 1024 MBSubmit: 270  Solved: 192[Submit][Status][Discuss] Description 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4<5<6<7<8<9<10<J<Q…
Herbs Gathering Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 687    Accepted Submission(s): 145 Problem Description Collecting one's own plants for use as herbal medicines is perhaps one of t…
题意:有N*M的棋盘,用K种颜色去染,要求相邻块不能同色.已知每种颜色要染的块数,问能不能染,如果能,输出任一种染法. 最开始dfs失败了- -,优先搜索一行,搜完后进入下一列,超时.本来以为搜索不行,看别人给的思路就是搜索+剪枝. 但是一直不知道该怎么剪,看了解题报告才发现,剩下的格子的数量+1必需是剩余最多种类棋子的两倍,否则必定会有相邻存在. 例如 3*3的空格中,一类棋子最多只能占5个. #include <iostream> #include <cstring> #inc…
搜索+剪枝--POJ 1011 Sticks 博客分类: 算法 非常经典的搜索题目,第一次做还是暑假集训的时候,前天又把它翻了出来 本来是想找点手感的,不想在原先思路的基础上,竟把它做出来了而且还是0ms过得.仔细想想,对搜索又有了一点点认识.     题目要求将一系列的sticks重新组合,形成若干相等相等长度的木棒,且尽量使木棒长度最小,如果数据量比较小的话,就纯粹是搜索了,但题目要求的 sticks可能达到64根,如果纯粹的搜索则显然是会远远超过1000ms的,因而也就把剪枝放在了很重要的…
题目链接 luogu P1072 Hankson 的趣味题 题解 啊,还是noip的题好做 额,直接推式子就好了 \(gcd(x,a_0)=a_1=gcd(\frac{x}{a_1},\frac{a_0}{a_1})\) 额....上面这个式子似乎没用,看b的 \(lcm(x,b_0)=\frac{x*b_0}{gcd(x,b_0)}=b1\) 那么\(gcd(x,b_0)=\frac{x*b_0}{b_1}\) \(gcd(\frac{b_1}{b_0},\frac{b_1}{x})=1\)…
二次联通门 : luogu P3709 大爷的字符串题 /* luogu P3709 大爷的字符串题 莫队 看了半天题目 + 题解 才弄懂了要求什么... 维护两个数组 一个记录数字i出现了几次 一个记录出现了i次的有几个数.. */ #include <algorithm> #include <cstdlib> #include <cstdio> #include <cmath> #define Max 200090 void read (int &…
题目传送门 这道题是一道经久不衰的搜索题目,但是开始做的时候我没什么思路==.初始值-1 输出格式 \(naive\)想法 从右往左依次尝试填充数字,把算式当做一个3行\(n\)列的网格.(什么?你问为什么是从右往左?大概是人类习惯吧\(qwq\)),然后需要头脑清晰的分类讨论,对搜到第三行字符串时要特别注意. 具体的分类讨论:当前位置是否已经填了(\(*2\)),判断当前行是不是第三行(\(*2\)). \(80\)分代码: #include<cstdio> #include<algo…
题目传送门 显然是一个搜索.但是开始没有任何的剪枝,暴力从\((1,1)\)点开始搜索,很自然地T了6个点. #include<cstdio> #include<algorithm> using namespace std; const int group[10][10]= { 0,0,0,0,0,0,0,0,0,0, 0,1,1,1,2,2,2,3,3,3, 0,1,1,1,2,2,2,3,3,3, 0,1,1,1,2,2,2,3,3,3, 0,4,4,4,5,5,5,6,6,6…
洛谷P1120:https://www.luogu.org/problemnew/show/P1120 思路 明显是搜索题嘛 但是这数据增强不是一星半点呐 我们需要N多的剪枝 PS:需要先删去超出50的木棍 首先我们可以想到枚举每个小木棍的长度来搜索 但是直接枚举肯定会超时的 所以我们想到优化剪枝 因为要组成木棍肯定要从被砍开的木棍中的最大值开始枚举到所有木棍总和长(只有一根木棍被砍开) 然而这样却还不是最优的剪枝 因为每根原始小木棍的长度一样 所以枚举长度的时候可以判断是否被总和整除 而且我们…
题目链接 https://www.luogu.org/problemnew/show/P1025 解题思路 一道简单的dfs题,但是需要剪枝,否则会TLE. 我们用dfs(a,u,num)来表示上一个数为a,已经搜索完了a个数,现在的和是num. #include<iostream> using namespace std; int n,k,a; long long ans; void dfs(int a,int u,int now){ if(now>n) return; if(u>…
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定的步数内消除所有的方块,消除方块的规则如下: 1 .每步移动可以且仅可以沿横向(即向左或向右)拖动某一方块一格:当拖动这一方块时,如果拖动后到达的位置(以下称目标位置)也有方块,那么这两个方块将交换位置(参见输入输出样例说明中的图6 到图7 ):如果目标位置上没有方块,那么被拖动的方块将从原来的竖列…
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的"靶形数独",作为这两个孩子比试的题目. 靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有 9 个 3 格宽×3 格 高的小九宫格(用粗黑色线隔开的).在这个大九宫格中,有一些数字是已知的,根据这些数字,利用逻辑推理,在其他的空格上填入 1 到 9 的数字.每个数字在每个…
运筹帷幄 (road.cpp) [题目描述] 刘邦军行至迷糊林,见其中瘴气围绕,又有青狼猛虎之兽,难于前行. 已知迷糊林是一个共有n个结点的图,点与点之间共有m条道路相连接,每条路有参数t,c,分别表示行走于该路的时间以及兵士损失量.你已知道,刘邦除了脸皮厚什么都不会而且兵力少得可怜,所以需要在还能有兵士存活的情况下尽快走出迷糊林. 刘邦踞鞍而问曰:“子房,如之奈何?”. [文件格式] 输入文件: 第一行两个整数n,m,表示节点数以及边数. 以下m行每行4个整数u,v,c,t,表示u点以及v点之…
想说这个题要是想做出来就必须不干一件事情,那就是不要点开标签..点开标签看到那些平衡树什么的.... 首先,我们要理解这个题的题意.买彩票是什么大家都应该知道吧,一般来说,就是从很多数里面选出来几个,然后系统,额……就是那个有一堆球的机器,弹出来几个球球上的数字就是中奖数字. 对于这个题,我们要是选择的n个数的倒数的和等于一开始的X/Y,不妨设它为t,然后我们进行搜索,这里事先说一下,在进行了常数优化后,AC代码最慢的点要650+.怎么搜索呢,对于这个题,很明显就有了两种思路,一种是朴素的一个个…
Description 小A有一个1-2^N的排列A[1..2^N],他希望将A数组从小到大排序,小A可以执行的操作有N种,每种操作最多可以执行一次,对于所有的i(1<=i<=N),第i中操作为将序列从左到右划分为2^{N-i+1}段,每段恰好包括2^{i-1}个数,然后整体交换其中两段.小A想知道可以将数组A从小到大排序的不同的操作序列有多少个,小A认为两个操作序列不同,当且仅当操作个数不同,或者至少一个操作不同(种类不同或者操作位置不同).   下面是一个操作事例:   N=3,A[1..…
地址 看数据范围很明显的搜索题,暴力dfs是枚举按顺序每一场比赛的胜败情况到底,合法就累计.$O(3^{n*(n-1)/2})$.n到10的时候比较大,考虑剪枝. 本人比较菜所以关键性的剪枝没想出来,但由于数据较水,20个点就T了2个.依旧记下剪枝方案,没想到的用下划线和红笔标注: 剪枝一:个人觉得应该将数组从小到大排序来搜,这样感觉起来状态少一些.实测有时和从大到小相差不大,但有时可能有效. 剪枝二:如果当前选手就算赢了所有剩下的场也到不了分数,剪掉.弱剪枝. 剪枝三:如果剩下所有场全是决出胜…
题目链接 题意 : 有 n 个球队,给出主客场胜负图,找出一个序列 1.2.3..... 使得 1 战胜过 2 .2 战胜过 3.3 战胜过 4..... n 战胜过 1 ( 这个序列是 1~n 的其中一个全排列 ) 分析 : n 最大就只有 20 ,明摆着让你搜,但是这题我失了志啊,下面说几个搜索要注意的点 ① 因为能构成环,所以答案序列肯定是从 1 开始 ② 搜索时候如果接下来没有一个点是能够战胜 1 的那么则不继续搜 ( 没有这个剪枝会被第四个点卡住 ) ③ 题目给出的图是不对称的,而且要…
题意 : 有n根木棍(n<=64),它们由一些相同长度的木棍切割而来,给定这n根木棍的长度,求使得原来长度可能的最小值. 分析 : 很经典的深搜题目,我们发现答案只可能是所有木棍长度总和的因数,那么我们只要去枚举因数然后搜索是否可行即可!具体实现看代码可能更容易看懂,这里不赘述.重要的是体会此类深搜的代码构建过程以及剪枝的考虑的巧妙性! #include<stdio.h> #include<algorithm> #include<string.h> using n…
题目链接 https://www.luogu.org/problemnew/show/P1731 解题思路 既然看不出什么特殊的算法,显然是搜索... dfs(u,v,s,r0,h0)分别表示: u为已经搜完的层数,v是现在的体积(不包括这一层),s是现在的表面积(所求的)(不包括这一层),r0是当前层的最大半径,h0是当前层的最大高度. 不加剪枝的dfs...(TLE!!!!) 本题的难点 剪枝 剪枝1:搜索到每一层时,如果当前的体积加上剩下层(包含当前层)的最小体积还是大于要求的总体积时,必…
Sticks Problem's Link:   http://poj.org/problem?id=1011 Mean: http://poj.org/problem?id=1011&lang=zh-CN&change=true analyse: 爆搜,但是其中蕴含着很多剪枝. Time complexity: O(n^2) Source code:  // Memory Time // 1347K 0MS // by : Snarl_jsb // 2014-11-07-17.14 #i…
http://acm.hdu.edu.cn/showproblem.php?pid=4848 比赛的时候我甚至没看这道题,事实上不难.... 可是说实话,如今对题意还是理解不太好...... 犯的错误: 1.floy循环次序写错, 2.搜索的时候.应该先推断i是不是能够搜(就是可不可能产生解).然后标记vis[i]=1.我二逼的先标记vis[i]=1,然后推断i是不是可搜,这样肯定会导致有些时候,cnt!=n 我的剪枝方法(2546MS AC): 搜下一个结点之前.确保时间小于全部的未訪问的结点…
Description An addition chain for n is an integer sequence  with the following four properties: a0 = 1 am = n a0<a1<a2<...<am-1<am For each k ( ) there exist two (not neccessarily different) integers i and j ( ) with ak =ai +aj You are give…