地址 看数据范围很明显的搜索题,暴力dfs是枚举按顺序每一场比赛的胜败情况到底,合法就累计.$O(3^{n*(n-1)/2})$.n到10的时候比较大,考虑剪枝. 本人比较菜所以关键性的剪枝没想出来,但由于数据较水,20个点就T了2个.依旧记下剪枝方案,没想到的用下划线和红笔标注: 剪枝一:个人觉得应该将数组从小到大排序来搜,这样感觉起来状态少一些.实测有时和从大到小相差不大,但有时可能有效. 剪枝二:如果当前选手就算赢了所有剩下的场也到不了分数,剪掉.弱剪枝. 剪枝三:如果剩下所有场全是决出胜…
dfs+剪枝*4(通过得很勉强): 1.只枚举一半的比赛,另一半直接得出. 2.处理前缀和,若大于目标得分则剪枝 3.前缀和加上若接下来全胜的得分 仍小于 目标得分,则剪枝. 4.枚举到每个人的最后一场比赛时直接用 目标得分-前缀和 计算出最后一场的应得分. Code还是很简单的: #include<cstdio> using namespace std; ,,,}; ],ans,Pre[]; void dfs(int x,int y) { if(Pre[x]>a[x])return;…
Description Input 第一行包含一个正整数n,队伍的个数.第二行包含n个非负整数,即每支队伍的得分. Output 输出仅一行,即可能的分数表数目.保证至少存在一个可能的分数表. Sample Input 6 5 6 7 7 8 8 Sample Output 121 HINT N<=8 Source Solution 搜索,砍树式的剪枝.当某一队算到最后一场比赛时直接算结果,每次递归前判断如果以后几场全赢分数也达不到目标分数就剪枝,如果以后几场全输都超过目标分数也剪枝 代码运行时…
[传送门:BZOJ1306] 简要题意: 有n个队伍,每个队伍都要和其他队伍比一场,赢了的队得3分,输了的队不得分,打平两队各得一分,给出每个队伍的得分,求出对战方案数 题解: DFS暴搜!!一眼就觉得暴搜,但是时限尴尬,加了些剪枝,10s压线,真的幸运 剪枝: 1.如果当前队伍所搜索到的结果得分大于它自己的得分就退出 2.如果当前队伍全赢仍未搜索到的所有队伍都不能达到它自己的得分就退出 就这样,靠着RP,压着时限,AC(感人) 参考代码: #include<cstdio> #include&…
Input第一行包含一个正整数n,队伍的个数.第二行包含n个非负整数,即每支队伍的得分.Output输出仅一行,即可能的分数表数目.保证至少存在一个可能的分数表.Sample Input 6 5 6 7 7 8 8 Sample Output 121 Hint N<=8 这个明显就是爆搜吧,因为数据比较小. 但是数据十分神奇 枚举每场比赛,枚举编号较小的一队的结果,相应的较大的也可以推出结果 当有某一队剩下比赛全赢也比给定分数低就剪枝 当有某一队当前比分超过给定分数也剪枝 只要你把这俩个剪枝加上…
大力剪枝,最后洛谷上还开了o2才过-- 大概这样剪枝: 1.搜索中,一个队当前得分超过要求或者一个队剩下的比赛场数全赢也达不到要求则return: 2.注意到如果平局,最总分的贡献是2,否则是3,所以可以计算出非平局的常数,dfs中记录一下当前非平局有几场,如果超出要求或者剩下的场次全都非平局也达不到要求则return: 3.如果当前队需要全赢剩下的比赛才能达到要求,就直接使他全赢然后跳过与这个对相关的比赛: 4.如果当前队需要全赢剩下的比赛才能达到要求,就直接使他全输然后跳过与这个对相关的比赛…
预先警告:我的做法代码量比较大 看完题目后看到数据n<=8, 不难想到这题可以写深搜来做 分析 比如说以数据: 3 3 3 3 为例子, 进行了三场比赛:AB AC BC: 我们只要搜索每场比赛,并枚举比赛的三个结果(胜.负.平)并判断能否达到答案的分数即可 如果是三个人: void dfs(int step) { if(step==cs+1){ int ff=1; for(int i=1;i<=n;i++) if(a[i]!=s[i]) ff=0; if(ff) ans++; return;…
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…
题目链接:hdu 5469 Antonidas 题意: 给你一颗树,每个节点有一个字符,现在给你一个字符串S,问你是否能在树上找到两个节点u,v,使得u到v的最短路径构成的字符串恰好为S. 题解: 这题可以用树的分治+字符串hash,不过搜索+剪枝写的好一样可以过,而且跑的时间和正解差不多. 搜索的做法就是先随便找一个点当作根,然后预处理一下最大的深度,然后枚举起点,开始向各个方向遍历,如果这个点的最大深度小于未匹配的字符串长度,那么久向父亲方面搜. #include<bits/stdc++.h…
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…
搜索剪枝这个东西真的是骗分利器,然鹅我这方面菜的不行,所以搜索数学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 1011 Sticks 博客分类: 算法 非常经典的搜索题目,第一次做还是暑假集训的时候,前天又把它翻了出来 本来是想找点手感的,不想在原先思路的基础上,竟把它做出来了而且还是0ms过得.仔细想想,对搜索又有了一点点认识.     题目要求将一系列的sticks重新组合,形成若干相等相等长度的木棒,且尽量使木棒长度最小,如果数据量比较小的话,就纯粹是搜索了,但题目要求的 sticks可能达到64根,如果纯粹的搜索则显然是会远远超过1000ms的,因而也就把剪枝放在了很重要的…
题目描述 某地发行一套彩票.彩票上写有1到M这M个自然数.彩民可以在这M个数中任意选取N个不同的数打圈.每个彩民只能买一张彩票,不同的彩民的彩票上的选择不同. 每次抽奖将抽出两个自然数X和Y.如果某人拿到的彩票上,所选N个自然数的倒数和,恰好等于X/Y,则他将获得一个纪念品. 已知抽奖结果X和Y.现在的问题是,必须准备多少纪念品,才能保证支付所有获奖者的奖品. 输入输出格式 输入格式: 输入文件有且仅有一行,就是用空格分开的四个整数N,M,X,Y. 输出格式: 输出文件有且仅有一行,即所需准备的…
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…
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…
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定的步数内消除所有的方块,消除方块的规则如下: 1 .每步移动可以且仅可以沿横向(即向左或向右)拖动某一方块一格:当拖动这一方块时,如果拖动后到达的位置(以下称目标位置)也有方块,那么这两个方块将交换位置(参见输入输出样例说明中的图6 到图7 ):如果目标位置上没有方块,那么被拖动的方块将从原来的竖列…
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, Z 博士拿出了他最近发明的"靶形数独",作为这两个孩子比试的题目. 靶形数独的方格同普通数独一样,在 9 格宽×9 格高的大九宫格中有 9 个 3 格宽×3 格 高的小九宫格(用粗黑色线隔开的).在这个大九宫格中,有一些数字是已知的,根据这些数字,利用逻辑推理,在其他的空格上填入 1 到 9 的数字.每个数字在每个…
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…
运筹帷幄 (road.cpp) [题目描述] 刘邦军行至迷糊林,见其中瘴气围绕,又有青狼猛虎之兽,难于前行. 已知迷糊林是一个共有n个结点的图,点与点之间共有m条道路相连接,每条路有参数t,c,分别表示行走于该路的时间以及兵士损失量.你已知道,刘邦除了脸皮厚什么都不会而且兵力少得可怜,所以需要在还能有兵士存活的情况下尽快走出迷糊林. 刘邦踞鞍而问曰:“子房,如之奈何?”. [文件格式] 输入文件: 第一行两个整数n,m,表示节点数以及边数. 以下m行每行4个整数u,v,c,t,表示u点以及v点之…
写到一半才发现能够用双向搜索4层来写,但已经不愿意改了,干脆暴搜+剪枝水过去算了. 想到一个非常水的剪枝,h函数为  当前点到终点4个点的最短距离加起来除以2.由于最多一步走2格,然后在HDU上T了,又发现再搜索过程中.这个估价函数应该是递减的(贪心),再加上这个剪枝就过了. #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<list>…
这个问题是一个典型的类型的问题迷宫广泛的搜索. 在网上看到了很多解决方案. 没什么解决问题的分析报告,不指出其中的关键点.代码更像是一大抄.一些分析师也有很大的文章分析.只是不要全部命中关键,什么是广泛而深刻的,甚至搜索发现,在分析差异.为什么快速搜索宽像,什么样的风暴喊搜索,都错了.代码都是抄过的. 通过一大段的时间研究,最终搞通了. 本题尽管能够说是广搜.可是当中的关键却是剪枝法.为什么呢? 由于迷宫并不能简单地广搜就能搜索出全部路径的,甚至仅仅要迷宫大点就不能搜索出是否有路径.假设没有条件…
DFS+剪枝 POJ2362的强化版,重点在于剪枝 令InitLen为所求的最短原始棒长,maxlen为给定的棒子堆中最长的棒子,sumlen为这堆棒子的长度之和,那么InitLen必定在范围[maxlen,sumlen]中 根据棒子的灵活度(棒子越长,灵活度越低) DFS前先对所有棒子降序排序 剪枝: 1. 由于所有原始棒子等长,那么必有sumlen%Initlen==0: 2. 若能在[maxlen,sumlen-InitLen]找到最短的InitLen,该InitLen必也是[maxlen…
Problem UVA140-Bandwidth Time Limit: 3000 mSec  Problem Description Given a graph (V, E) where V is a set of nodes and E is a set of arcs in V ×V , and an ordering on the elements in V , then the bandwidth of a node v is defined as the maximum distan…
多校10 1001 HDU 6171 Admiral 题意 目标状态是第i行有i+1个i数字(i=0-5)共6行.给你初始状态,数字0可以交换上一行最近的两个和下一行最近的两个.求20步以内到目标状态的最少步数是多少. 题解 设计一个估价函数来剪枝,每个数最少需要|a[i][j]-i|步回到自己的位置.当所有数回到自己位置,0自然也回到自己位置.所以估价函数不计算0. 然后21个位置,每个位置数字是0-5,用三位2进制表示.总共63位2进制.long long可以记录状态.然后就是搜索了. 代码…
题目链接 Problem Description In mathematics, the four color theorem, or the four color map theorem, states that, given any separation of a plane into contiguous regions, producing a figure called a map, no more than four colors are required to color the…
[题目背景:] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. [题目描述:] 设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri, 高度为Hi的圆柱.当i<M时,要求 \(R_i > R_{i+1}\) 且 $H_i>H_{i+1}H $. 由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小. 令Q= Sπ 请编程对给出的N和M,找出蛋糕的制作方案(适当的Ri和Hi的值),…