摘要: 非常适合A*的一道题。比普通的迷宫问题加一个信息k表示当前穿过的障碍物的数量。#include#include#includeusing namespace std;const int MAX = 21;int m,n,k;int C[MAX][MAX][MAX];int G[MAX][MAX];i... 阅读全文
posted @ 2015-07-10 21:53 陈瑞宇 阅读(721) 评论(0) 推荐(0) 编辑
摘要: 根据先序历遍和中序历遍输出后序历遍,并不需要真的建树,直接递归解决#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) 编辑