摘要: 根据先序历遍和中序历遍输出后序历遍,并不需要真的建树,直接递归解决#include#includeconst int N = 30;char preOrder[N];char midOrder[N];char S[N];int top;void solve(char *pre,char *mid,i... 阅读全文
posted @ 2015-07-10 21:47 陈瑞宇 阅读(533) 评论(0) 推荐(0) 编辑
摘要: 看上去非常像背包的问题,但是体积太大了。线性规划的知识,枚举附近点就行了,优先选性价比高的,宝物有两种体积为S0,价值V0,体积S1,价值V1。枚举分以下几种:1:枚举拿宝物1的数量,然后尽量多拿宝物2;O(N/S0)2:枚举拿宝物2的数量,同上;O(N/S1)3.贪心,尽量选性价比高的令gcd(S... 阅读全文
posted @ 2015-07-10 19:38 陈瑞宇 阅读(723) 评论(2) 推荐(0) 编辑
摘要: 题意就是给一张无向图,去掉某些结点,然后连成一条链,问最少去掉几个结点。n很小n=n-1。#includeusing namespace std;const int maxn = 15;int G[maxn][maxn];int n;int c[maxn];bool dfs(int u,int s,... 阅读全文
posted @ 2015-07-10 19:17 陈瑞宇 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 骨牌无非两种放法,横着或竖着放,每次检查最r,c最小的没访问过的点即可。如果不能放就回溯。最外面加一层认为已经访问过的位置,方便判断。#includeconst int MAXD = 56;const int MAXB = 29;const int MAXP = 7;bool used[MAXB];... 阅读全文
posted @ 2015-07-10 19:07 陈瑞宇 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 剪枝1:在同一个维度上的点具有相同的奇偶性,如果奇数数量只有奇数个那么一定不能返回原点。剪枝2:当前位置怎么也走不回去。3:沿途判断障碍即可。在oj上提交0.347s,最快的0.012s,应该有更好的做法。#includeconst char *bin = "ensw";const int dx[]... 阅读全文
posted @ 2015-07-10 19:02 陈瑞宇 阅读(312) 评论(1) 推荐(0) 编辑
摘要: 要输出所有路径,又要字典序,dfs最适合了,用并查集判断1和目的地是否连通即可#includeusing namespace std;const int maxn = 21;int p[maxn],cnt[maxn];void init(int n) { for(int i = 1;i <= ... 阅读全文
posted @ 2015-07-10 18:51 陈瑞宇 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 首先说说IDS,就DFS限定一个层数上限maxd,如果在maxd范围内没有找到解,就增加maxd,继续搜索。当访问到当前结点u时,估计还要搜索h(u)层,如果h(u)+当前层数d>maxd的时候就剪枝,这就是IDA*。IDA*属于DFS,当状态空间某一层的结点数无穷大时,BFS失效,只能DFS。相比... 阅读全文
posted @ 2015-07-08 12:17 陈瑞宇 阅读(1630) 评论(0) 推荐(0) 编辑
摘要: 看到next_permutation好像也能过╮(╯▽╰)╭这题学习点:1.建图做映射2.通过定序枚举保证字典序最小3.strtok,sscanf,strchr等函数又复习了一遍,尽管程序中没有实际用上4.剪枝,或者回溯#includeusing namespace std;int G[8][8],... 阅读全文
posted @ 2015-07-07 22:31 陈瑞宇 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 这题数据大容易TLE优化:预处理, 可以先枚举出5^3的状态然后判断合不合法,但是由于题目说了有很多墙壁,实际上没有那么多要转移的状态那么可以把底图抽出来,然后3个ghost在上面跑到时候就不必判断了,减少了两次无用的枚举。减少代码的方法:1.结点没有3个时增加冗余点,2.把位置坐标二元组编号成一个... 阅读全文
posted @ 2015-07-07 00:57 陈瑞宇 阅读(986) 评论(1) 推荐(0) 编辑
摘要: 题意,给你一颗树的bfs序和dfs序,结点编号小的优先历遍,问你可能的一种树形;输出每个结点的子结点。注意到以下事实:(1)dfs序中一个结点的子树结点一定是连续的。(2)bfs,dfs序中的一个结点u的后续结点一定是u或u的后兄弟结点{v},或u和{v}的后代节点{s}。(3)如果有后兄弟结点,那... 阅读全文
posted @ 2015-07-05 20:27 陈瑞宇 阅读(2567) 评论(1) 推荐(4) 编辑
摘要: 一道关乎人生完整的问题。DBFS的优越:避免了结点膨胀太多。假设一个状态结点可以扩展m个子结点,为了简单起见,假设每个结点的扩展都是相互独立的。分析:起始状态结点数为1,每加深一层,结点数An = An-1*m。假如搜索了i层找到终点,那么经过的结点数是O(i^m),如果从两边同时搜索,结点数是O(... 阅读全文
posted @ 2015-07-05 11:27 陈瑞宇 阅读(321) 评论(0) 推荐(0) 编辑
摘要: InputEach input set consists of a sequence of 52 integers separated by spaces and/or ends of line. The integers represent card values of the initial d... 阅读全文
posted @ 2015-07-04 00:24 陈瑞宇 阅读(441) 评论(0) 推荐(0) 编辑
摘要: InputInput data to the program specifies the order in which cards are dealt from the pack. The input contains pairs of lines, each line containing 26 ... 阅读全文
posted @ 2015-07-03 18:57 陈瑞宇 阅读(328) 评论(0) 推荐(0) 编辑
摘要: input80000000000000000000011110000111100011111001111110011110000111000-89 14 17 22 23 44 63 69 88 94 113 -120000-40 -10outputImage 19 14 17 22 23 44 6... 阅读全文
posted @ 2015-06-30 23:25 陈瑞宇 阅读(492) 评论(0) 推荐(0) 编辑
摘要: 题意:有n个敌人,每个敌人有一个攻击范围,问你是否存在从西边到东边的路径,如果存在,输出入点和出点最靠北的坐标。把每个敌人看出一个圆,从上往下跑dfs连通,如果到达底部,那么无解。要求出最靠北的坐标,就在dfs过程中沿途检查与边界相交的点,并更新边界坐标。#include#include//#inc... 阅读全文
posted @ 2015-06-25 23:59 陈瑞宇 阅读(915) 评论(0) 推荐(0) 编辑