随笔分类 -  搜索

摘要:挑战程序设计竞赛 2.1 搜索。 生成排列,最优性剪枝 阅读全文
posted @ 2015-10-18 16:12 陈瑞宇 阅读(185) 评论(0) 推荐(0) 编辑
摘要:挑战程序设计竞赛 2.1 搜索。 杨辉三角,组合数 阅读全文
posted @ 2015-10-18 16:01 陈瑞宇 阅读(202) 评论(0) 推荐(0) 编辑
摘要:挑战程序设计竞赛 2.1 搜索。 dfs,stl,unique 阅读全文
posted @ 2015-10-18 15:54 陈瑞宇 阅读(234) 评论(0) 推荐(0) 编辑
摘要: bfs,康托展开,逆康托展开 X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[2]*1!+a[1]*0! 阅读全文
posted @ 2015-10-18 15:38 陈瑞宇 阅读(389) 评论(0) 推荐(0) 编辑
摘要:A*BFS,曼哈顿距离 阅读全文
posted @ 2015-10-18 15:33 陈瑞宇 阅读(246) 评论(0) 推荐(0) 编辑
摘要:挑战程序设计竞赛 2.1 搜索。bfs 阅读全文
posted @ 2015-10-18 15:26 陈瑞宇 阅读(207) 评论(0) 推荐(0) 编辑
摘要:挑战程序设计竞赛 2.1 搜索。 dfs,最优性剪枝,也可迭代加深 阅读全文
posted @ 2015-10-18 15:22 陈瑞宇 阅读(165) 评论(0) 推荐(0) 编辑
摘要:挑战程序设计竞赛 2.1 搜索。 dfs,剪枝 阅读全文
posted @ 2015-10-18 15:15 陈瑞宇 阅读(350) 评论(0) 推荐(0) 编辑
摘要:题目链接:http://codeforces.com/gym/100650根据给出的树和d,求出一些结点,这些结点形成子树的第d层结点数应该尽量多,具体要求可以参考题目。dfs一个结点前保存询问深度的答案,访问完以后减去之前的值就得到答案了。#includeusing namespace std;c... 阅读全文
posted @ 2015-08-18 18:06 陈瑞宇 阅读(164) 评论(0) 推荐(0) 编辑
摘要:如果直接模拟水向周围流会TLE,因为某些个结点被重复扩展了多次,科学做法是topo排序,每次只把入度为0的点放入队列,这样就严格保证了每个结点只被扩展一次。#includeusing namespace std;#define eps 1e-9#define bug(x) cout son[maxn... 阅读全文
posted @ 2015-08-05 09:45 陈瑞宇 阅读(345) 评论(0) 推荐(0) 编辑
摘要:用(x,s)表示一个状态,x表示机器人的位置,s表示其他位置有没有物体。用个fa数组和act数组记录和打印路径,转移的时候判断一下是不是机器人在动。#includeusing namespace std;const int maxn = 16;const int maxe = 32;const in... 阅读全文
posted @ 2015-07-31 11:51 陈瑞宇 阅读(239) 评论(0) 推荐(0) 编辑
摘要:暴力,和八皇后很像,用表示i+j和i-j标记主对角线,但是还是要加一些的剪枝的。1.最裸的暴搜6.420s,差点超时2.之前位置放过的就没必要在放了,每次从上一次放的位置开始放0.400s#include#includeconst int maxn = 11;char G[maxn][maxn];i... 阅读全文
posted @ 2015-07-31 10:45 陈瑞宇 阅读(281) 评论(0) 推荐(0) 编辑
摘要:题意:八数码,但是转移的方式是转动,一共十二种,有多组询问,初态唯一,终态不唯一。题解:初态唯一,那么可以预处理出012345678的所有转移情况,然后将初态对012345678做一个映射,再枚举一下终态的所有情况,取最小值即可。学了逆cantor展开,cantor展开是一个变进制数,每位上是原序列... 阅读全文
posted @ 2015-07-26 22:22 陈瑞宇 阅读(296) 评论(0) 推荐(0) 编辑
摘要:题意:给你一些N个点,M条边,走每条边要花费金钱,然后给出其中必须访问的点,在这些点可以打工,但是需要先拿到证书,只可以打一次,也可以选择不打工之直接经过它。一个人从1号点出发,给出初始金钱,问你能不能访问所以的点,并且获得所以证书。题解:目标是那些一定要访问的点,怎么到达的我们不关心,但是我们关心... 阅读全文
posted @ 2015-07-21 21:29 陈瑞宇 阅读(242) 评论(3) 推荐(0) 编辑
摘要:题意:问两个迷宫是否存在公共最短路。题解:两个反向bfs建立层次图,一遍正向bfs寻找公共最短路#include#include#includeusing namespace std;const int maxn = 500+1;int d1[maxn][maxn];int d2[maxn][max... 阅读全文
posted @ 2015-07-19 11:25 陈瑞宇 阅读(302) 评论(0) 推荐(0) 编辑
摘要:题意:给你一堆牌,和一些洗牌机,可以改变牌的顺序,问你能不能通过洗牌机把数字为x的牌洗到第一个位置。题解:反向建边,dfs判断连通性#include#includeusing namespace std;const int maxn = 200000+4;int a[maxn];vector son... 阅读全文
posted @ 2015-07-19 09:53 陈瑞宇 阅读(337) 评论(0) 推荐(0) 编辑
摘要:加一个维度,钥匙的状态,状压一下。n很小,钥匙也只有10个,bfs就好了。忘了数组初始化。以后坚决不犯这种低级错误。#include#include#includeusing namespace std;const int maxn = 50+1;int g[maxn][maxn][4];int k... 阅读全文
posted @ 2015-07-17 14:10 陈瑞宇 阅读(143) 评论(0) 推荐(0) 编辑
摘要:一开始最容易想到间隔最多为n,但是结点还是太多了,需要优化。预处理:预判一下并保存下一个可以放的位置距离之前的距离。这样可以减少很多判断。最优化剪枝:如果当前长度+剩下没放的程序*最短间隔如果大于等于ans,那么对答案没有贡献,可以剪去。优化:占用和不占用两种状态,如果横向来看可以压缩为int,判断... 阅读全文
posted @ 2015-07-14 15:48 陈瑞宇 阅读(549) 评论(0) 推荐(0) 编辑
摘要:多联骨牌的生成办法,维基上只找到固定的骨牌fix,而free的没有找到。于是只好写个set判重的简单枚举了。旋转的操作,可以在坐标轴上画个点,以原点为轴心,逆时针旋转90度,新的点的坐标为(-y,x)。顺时针也差不多。反转类似。对于操作完的骨牌,还要进行标准化,取最小的横纵坐标为参考,求出新的坐标,... 阅读全文
posted @ 2015-07-13 23:53 陈瑞宇 阅读(531) 评论(0) 推荐(0) 编辑
摘要:读懂题意以后还很容易做的,和AbbottsRevenge类似加一个维度,筛子的形态,可以用上方的点数u和前面的点数f来表示,相对的面点数之和为7,可以预先存储u和f的对应右边的点数,点数转化就很容易了。具体做法看代码#includeusing namespace std;const int maxn... 阅读全文
posted @ 2015-07-13 23:47 陈瑞宇 阅读(436) 评论(0) 推荐(0) 编辑

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