搜索
Jinx_jinx_again
啊啊啊啊哈哈哈
展开
-
Hdu 4771 Stealing Harry Potter's Precious (搜索)
题目大意:地图上有最多4件物品,小偷要全部拿走,问最少的路程。思路分析:考虑到物品数量只有4。可以先用最多5次bfs求出每个目标点到其他目标点的距离。然后枚举依次拿取物品的顺序,用next_permutation...#include #include #include #include #include using namespace std;原创 2014-11-20 21:26:56 · 953 阅读 · 0 评论 -
HDU 3533 Escape
这题之前用的地图预处理,然后超时了。其实应该是自己的预处理的效率太低。然后在网上看了一份结题报告。居然连样例都过不了也能AC。。。不过倒是让我想到了预处理的优化。(明天再写吧)先说说他的代码。先也是预处理地图。记录下每一颗子弹第一次出现的 位置 以及到 此时的时间 还有这颗 子弹所属的炮台的发射周期 。这样以后这颗子弹再出现在此处的时间就是 time + per原创 2013-08-31 23:28:27 · 981 阅读 · 0 评论 -
hdu 4090 GemAnd Prince
题目大意:别人说是消消看,至于你玩没玩过。反正我是没玩过的。就是选择一个钻石,可以消除与它相连的所有钻石。并获得 消除数量*消除数量 的分思路:直接暴搜,然后用一个cnt数组表示每一种钻石剩余的数量,进行剪枝。被坑了两天。 开始用BFS 搜,用DFS进行标记。超内存。后来改成了 DFS + DFS 发现有些细节不好处理。最后换成了DFS搜 BFS标记消除。原创 2013-08-30 21:46:46 · 818 阅读 · 0 评论 -
HDU 4620 Fruit Ninja Extreme 暴搜
题目大意:题目就是描述的水果忍者。N表示以下共有 N种切水果的方式。M表示有M个水果需要你切。W表示两次连续连击之间最大的间隔时间。然后下N行描述的是 N种切发第一个数字C表示这种切法可以切多少个水果。第二个数字表示这种切法所处在的时间。后C个数字表示此时这种切法所切掉的水果编号。注意:同时切3个以上才表示连击,一个水果最多只能切一次。思路:直接暴搜,再原创 2013-08-26 08:40:43 · 964 阅读 · 0 评论 -
hdu 4490 Mad Veterinarian
91 40 1 01 1 11 1 01 0 1 1 3 0 02 1 0 0 2 0 03 2 3 4 5 1 24 1 1 2 3 1 12 40 3 40 0 50 0 31 2 0 0 0 0 52 2 0 0 0 0 43 1 2 3 0 0 14 1 2 3 0 0 23 60 1 11 0 11 1 01 1 2 3 0 1 02 1 2原创 2013-08-12 09:29:08 · 1240 阅读 · 0 评论 -
HDU 4431 Mahjong
WTF 照着大白上敲然后一直TLE。。。然后狂加剪枝。。卡了两天才过。。。题意就是打麻将,问你胡什么牌。#include #include #include #include using namespace std;const char *mahjong[]={ "1m","2m","3m","4m","5m","6m","7m","8m",原创 2013-08-22 21:55:55 · 888 阅读 · 0 评论 -
hdu 1664 Different Digits
参考 http://blog.csdn.net/u010228612/article/details/9715555#comments ....狂拽酷炫YXJ~~~~ps:一个数论中的结论:对于任意的整数n,必然存在一个由不多于两个的数来组成的一个倍数。因为a,aa,aaa……取n+1个,则必有两个模n余数相同,相减即得n的倍数m。而m只由a、0组成。#include #inclu原创 2013-08-05 10:08:56 · 867 阅读 · 0 评论 -
hdu 2821 Pusher (dfs)
把这个写出来是不是就意味着把 http://www.hacker.org/push 这个游戏打爆了? ~啊哈哈哈其实只要找到一个就可以退出了 所以效率也不算很低的 可以直接DFS呀呀呀呀#include #include #include #include #include #include using namespace std;int dx[] = {-1,原创 2013-08-05 14:33:47 · 814 阅读 · 0 评论 -
hdu 4277 USACO ORZ (dfs暴搜+hash)
题目大意:有N个木棒,相互组合拼接,能组成多少种不同的三角形。思路:假设c>=b>=a 然后枚举C,在C的dfs里嵌套枚举B的DFS。#include #include #include #include #include #define mod 2000007using namespace std;int n;int X[20];bool vis[20];int原创 2013-07-26 08:34:32 · 898 阅读 · 0 评论 -
POJ 2676 && POJ 2918 数独 DFS
题目大意:数独都玩过。。。不多说。。。思路:简单暴力。预处理行!列!块!中已经出现过的数字,然后就是还有谁。。哼哼。。。#include #include #include #include #include using namespace std;struct node{ int x,y;};bool row[10][10];bool lin原创 2013-12-11 22:02:06 · 952 阅读 · 0 评论 -
POJ 2718 Smallest Difference (dfs)
题目大意:就是在给出的几个数中,分成两个排列,使之组合后 两个序列所对应的值的差最小思路:直接枚举一半,然后枚举组合数,简单暴力。注意题目中说的 ,除非是这个数一定为0 不然不能用0开头。就是下面两个数据50 2 30 2分别输出的是17 和 2#include #include #include #include #inc原创 2013-12-12 14:59:47 · 1293 阅读 · 0 评论 -
Hdu 2196 Computer (树形dp)
题目大意:求出每一个结点距离叶子节点的最大距离。思路分析:假设1为树的根。通过一遍dfs 可以求出每个节点到儿子节点上的叶子节点的最远距离。然后我们要做的就是如果更新答案。问题就是如果我们开始求的最大值本来就是一个儿子更新的,如果再深搜的话又会造成重复更新。所以就记录两个值,最大值和次大值。然后不断更新这两个值。#include #includ原创 2014-08-18 16:34:41 · 700 阅读 · 0 评论 -
Hdu 4016 Magic Bitwise And Operation (暴搜 dfs)
题目大意:在n个数中选取k个数,是他们的按位与最小。思路分析:开始往dp想,但是这道题是不满足子问题的。当前的值最小,但是丢掉了和后面的1错开的最多的状态。暴搜的剪枝:1.与后面所有的树相与都比ans小,剪掉,因为越与越小。2.先将所有的数排序,先取小的。3.ans可以不断更新,不需要达到k的时候更新,原因和1相同。#include #incl原创 2014-08-27 16:28:56 · 1003 阅读 · 0 评论 -
hdu 1016 Prime Ring Problem (dfs)
一切见注释。#include #include #include #include using namespace std;bool vis[22];int n;int ans[22];int top;bool isprime(int x)//判断素数{ for(int i=2;i<x;i++) if(x%i==0)return false;原创 2014-05-29 00:18:35 · 1199 阅读 · 2 评论 -
hdu 2102 A计划 (dfs)
注意传送的时候一定要传送过去。如果另外一边还是传送门的话 也是死路。注意判断终点的时候 还要层数一样#include #include #include #include #include using namespace std;char map[2][12][12];bool vis[2][12][12];int dx[] = {0,0,-1,1};in原创 2014-03-21 21:26:29 · 908 阅读 · 0 评论 -
hdu 2181 哈密顿绕行世界问题 (水dfs =。=)
#include #include #include #include #include using namespace std;vector map[22];vector ans;bool vis[22];int st;int cas;void dfs(int pos,int cnt){ if(cnt==20) { for(int i原创 2014-03-21 20:34:06 · 749 阅读 · 0 评论 -
hdu 2337 Escape from Enemy Territory (presolve bfs +bfs+二分)
题目大意:地图上有很多敌人据点,主角想要离这些据点越远越好,但是又要到达终点。思路:既然是越远越好又要到达终点,当然我们需要枚举他到底能离据点多远。这个时候想着用二分枚举这个距离。然后我们用一个bfs预处理出地图中所有的店离据点的最近距离。(第一次写bfs的预处理。。。)接下来就是二分的过程了。#include #include #include原创 2013-12-21 19:52:22 · 1236 阅读 · 7 评论 -
poj 3134 Power Calculus(IDA*)
题目大意:用最小的步数算出 x^n 思路:直接枚举有限步数可以出现的所有情况。然后加一个A* 就是如果这个数一直平方 所需要的步骤数都不能达到最优 就剪掉#include #include #include #include #include #include using namespace std;int n;int save原创 2013-12-19 19:37:02 · 1036 阅读 · 0 评论 -
POJ 1011 Sticks (DFS + 剪枝)
题目大意:原来有很多根相同长度的木棒。乔治把这些木棒随意切成了 给出的长度。问你他原来带来的那些相同长度的木棒的长度。这个长度要最小。思路:强剪枝哦。。。首先,你只需要枚举总和长度的约数 这个比较好想。其次,你枚举到sum/2 还没有答案 就可以直接输出 sum了这都好想我们要事先排个序,按递减的顺序进行枚举。后面,如果你进入dfs原创 2013-12-19 16:38:09 · 1069 阅读 · 2 评论 -
POJ 3009 Curling 2.0
题目大意:有这样一个地图,地图上面有好多砖块用1表示,我们从起点(用2表示)开始扔球,球只会在撞到砖块的时候停下来,并把砖块撞破。问通过投掷多少次球可以让求经过或到达终点(用3表示)。思路:之前用BFS写。发现最后无法表示出每次碰撞后的地图的破损情况。所以换成DFS,在搜索完了以后把地图修复再重新对另外一个方向搜索。注意 题目中说最多只能投掷10次。题目中说的是解出最少的次数。所以用迭代加深搜原创 2013-07-03 16:43:02 · 621 阅读 · 0 评论 -
uva 624 CD (DP + DFS 输出方案)
题意:给一个上限 N个数字 求不超过这个上限的条件下 可以达到的最大和 思路:先用 0/1 背包的DP 来求出最优的上限和 再用DFS求出他的输出方案。由于自己刚刚接触DP 所以思路估计比较水 = =#include#include#include#include#include using namespace std;int v[30];int w[30]原创 2013-07-02 14:43:47 · 810 阅读 · 0 评论 -
POJ 3900 The Robbery
POJ 3900 暴搜加剪枝。原创 2013-07-19 00:22:33 · 1733 阅读 · 0 评论 -
POJ 2286 The Rotation Game
题目大意:如那三张图。给好他的初始状态。用八种方式移动,最后可以让中间那8个格子相等。思路:BFS超时噗。只好去看看DISCUSS用IDDFS,不明白为什么还是超时。只好再价格A*的剪枝。终于13秒过了。原谅我停止用药,原谅我放弃治疗。我能想到的输入和优化只能这样了。噗。~啊~我只是来水博客的~#include #include #include #include #include原创 2013-07-14 13:50:43 · 769 阅读 · 0 评论 -
POJ 1924 The Treasure
题目大意:在一个N*M的地图里。P要去找宝藏T,地图上有好多怪物呀好多怪物。怪物有友善的,有不友善的。那些什么怪物啊吊炸天,每秒钟都会瞬移。逮到P了就吃掉了吃掉了。只要靠近不友好种类的四周都会被吃掉。那些友好的就不惹他就行了。思路:首先对地图进行预处理,把每个时间的怪物的攻击范围区域都当做石头。然后进行BFS~。此处拜谢 吉吉 ~么么哒~#include #include #原创 2013-07-13 20:30:58 · 926 阅读 · 1 评论 -
hdu 1818 hdu 1818 It's not a Bug, It's a Feature!(位运算+bfs优先队列)
题意:给一个长度为n的bug,和m个补丁,然后是m个补丁的描述。第一个数字是这个补丁消耗的时间。第1个字符串是这个补丁要工作需要满足的条件,第2个字符串是这个补丁的作用详细一点说,对于第一个字符串,假设是 -0-+0。 -号代表这个位的bug不能出现,也就是不能有3号和5号bug。(定义最右边为1号,为了到时候方便位运算) +号就是指这个位bug一定要出现,也就转载 2013-07-10 23:59:38 · 971 阅读 · 0 评论 -
HDU 1242 Rescue(BFS +优先队列)
题目大意:一个娃被关在监狱里了,他的好基友们前来营救。碰到壮丁就花个一分钟的时间杀掉。每走一步又要花费一分钟。问他的朋友救到他要多久。注意:他有好多基友。思路:因为有好多基友,所以就用倒着推。让他去找基友。碰到壮丁STEP+=2 否则就+1。。找到以后就可以丢肥皂了。#include #include #include #include #include using name原创 2013-07-10 20:44:13 · 742 阅读 · 0 评论 -
POJ 3322 Bloxorz I
题目大意:如题目中给的图也说的很明白了 ,#为不能走的地方 , . 是可以走的 ,E代表不能竖直立着的区域,O为终点。思路:用MAP用三维数组记录状态判重,节点用一个STATE记录此时木块的状态。X,Y分别记录木块靠左上方的位置。这样到处移动只要记录下这三个东西就够了。#include #include #include #include using namespace std;原创 2013-07-09 18:27:10 · 1028 阅读 · 2 评论 -
HDU 1067 GAP
大意:如图分部这的卡片,每次移动一个空格,让比空格左边的数大一的数移动到空格。最后达到目标状态。问最少的步数。#include #include #include #include #include #include using namespace std;#define mod 1000007long long tag;long long base[33]={1};str原创 2013-07-09 16:22:30 · 1183 阅读 · 0 评论 -
POJ 1564 Sum It Up
题目大意:给你N个数,加起来等于T的方式有多少种,不重复的输出出来。思路:先用深搜搜出可选结果。然后再结果中找到那些已经选中的结果。具体筛选过程看注释#include#include#includeusing namespace std;int tot,n;int a[1005];int vis[1005];int v[1005];int t[1005];int k;i原创 2013-06-22 14:30:23 · 651 阅读 · 0 评论 -
POJ 1321 棋盘问题
http://poj.org/problem?id=1321大意:在一个不规则棋盘,即‘#’处。摆放K个棋子,要求横竖不同行。#include#include#includeusing namespace std;int map[10][10];int n,k;int ans;int v[10];void Init(){ int i,j; for(i=原创 2013-05-30 13:37:35 · 588 阅读 · 0 评论 -
POJ 1475 Pushing Boxes(推箱子游戏 内嵌BFS)
题意:就特么是推箱子。思路:我们的目标是让箱子到达目标地点,所以我们就主要是对箱子进行BFS,然后我们在这之后判断一下人可不可以推动这个箱子。然后记录下人挪动的步骤。当然我们用3维数组对箱子的移动进行判重,第三维度记录箱子是从哪个方向移动过来的。#include #include #include #include #include #include using namespa原创 2013-07-11 16:28:39 · 816 阅读 · 0 评论 -
POJ 2870 Light Up
题目大意:一个N*M的地图哟,有好多烦人的黑块块。这些玩意可以遮光。然后我们要把好多啊好多啊灯上去,使得用最少的灯能把整个地图照亮。还有一个要求,就是砖块上有一个值,要让上下左右四个方向的灯的数量加起来等于那个值。思路:用DFS枚举每一个点,能放就放,当然要面临着剪枝的问题。(我将黑块用 -1 表示 放灯用 -2 表示)我这里用了一个OPLIGHT函数,当传入的FLAG是T原创 2013-07-14 22:35:39 · 907 阅读 · 0 评论 -
POJ 1088 滑雪
题目大意:给一个记录高度的二维数组,然后找出从大到小的顺序的最长的一条路径。#include #include #include using namespace std;int map[105][105];int len[105][105];int n,m;int max(int a,int b,int c,int d){ int t=a; t = t>=b原创 2013-07-02 22:23:06 · 628 阅读 · 0 评论 -
POJ 3897 Maze Stretching
POJ 3897 (二分 + BFS)原创 2013-07-18 09:58:25 · 1126 阅读 · 0 评论 -
POJ 1426 Find The Multiple
用 1 0 枚举来宽搜 用MOD来判断是否到达目标状态。 #include #include #include #include using namespace std;int n,k;vector path;struct node{ int mod; //该点对应的MOD int set; //记录路径输出的上一个节点 int x;原创 2013-07-01 21:31:44 · 606 阅读 · 0 评论 -
POJ 3278 Catch That Cow
给N给K 有三种操作 N+1 N-1 N*2 让N==K 输出步骤数宽搜。#include #include #include using namespace std;int n,k;struct node{ int deep; //记录步骤数 int w; //记录数值}queue[1000005];int vis[1000005];原创 2013-07-01 19:24:49 · 611 阅读 · 0 评论 -
POJ 1195 Open the Lock
题目大意:一个数字通过每个位+1 -1 和旁边的交换,最后达到目标状态的最少步数。思路:没思路,我只是来试试双搜的。单搜:#include #include #include #include #include using namespace std;int vis[10000];int v[10000][2];bool found;int tag;struct原创 2013-07-15 16:23:38 · 690 阅读 · 0 评论 -
POJ 2049 Finding Nemo
题目大意:马琳要去寻找被困在迷宫的尼莫,迷宫有墙啊有门啊。问马琳最少要走过多少门才能找到尼莫。思路:刚看到题目不知道该怎么建图。后来干脆就繁琐的建掉。直接用一个MP的结构体记录每条边的状态:起点和终点,还有它是门还是墙。然后因为马琳在外面。如果对马琳进行搜索的话,首先就要找到入口,如果有好多入口的话就不好办了。所以我选择对尼莫进行搜索。如果他旁边找不到地图中记录的边的话。就意味着他走出原创 2013-07-12 10:30:23 · 1206 阅读 · 0 评论 -
POJ 1872 A Dicey Problem
题目大意:给一个由数字组成的地图和一个设定好的骰子。骰子被放在一个地点,告诉你地点的坐标和此时骰子的上面和前面。要求是当骰子的上面的值等于骰子周围点的值 或者 周围有一个-1的值的时候才能把骰子移动到那边。最后要求出骰子返回初始位置的路径。思路:首先骰子是给定的,所以知道上面和正面的时候我们就能知道骰子的各个面了,因为骰子的正对的两个面的值之和是7.。然后用一个4维的数组判重,一二维度记录坐标原创 2013-07-11 22:30:19 · 989 阅读 · 0 评论 -
POJ 1324 Holedox Moving(bfs + hash)
题目大意:身长为L的蛇要移动到坐标为(1,1)的路口,地图上有石块是不能移动的,而且蛇也不可以穿过自己的身体。求出移动到路口的最短步数。思路:对蛇头进行BFS,然后用一个三维数组进行判重。一二维度记录蛇头的位置,第三维度记录此时蛇身的状态。状态用2进制保存:算出蛇身每一块的local,状态+=local * base【i】.base之前预处理成2进制。#include #includ原创 2013-07-10 16:25:10 · 723 阅读 · 0 评论