摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4027题意:有N条船,每条船都有各自的耐久度.有一种武器能攻击一个范围内的船.还要能计算一定范围内所有船剩余耐久的和. 耐久度去整数.耐久度的和不大于263思路:每次更改都要更新范围内每条船的耐久度. 在攻击一定次数后,剩余耐久度肯定为1 所以结点中所有子节点耐久度均为1,则不需要继续更新 即发现Tree[o].sum == r - l + 1; 则不需要更新其子节点 1 #include <iostream> 2 #include <math.h> 3 using namespace 阅读全文
posted @ 2013-03-25 12:16 zx雄 阅读(155) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1827思路:用Tarjan算法求出各个强连通分支,同一个强连通分支抽象成一点 1 #include <iostream> 2 #include <vector> 3 #include <stack> 4 using namespace std; 5 const int maxn = 1000 + 10; 6 const int maxm = 2000 + 10; 7 struct Node{ 8 int cost; 9 int dfn; 10 int low; 11 ... 阅读全文
posted @ 2013-03-25 11:54 zx雄 阅读(220) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1269思路:Tarjan算法,模版题 1 #include <iostream> 2 #include <vector> 3 #include <stack> 4 using namespace std; 5 const int MAX = 10000 + 10; 6 int n; 7 vector <int> v[MAX]; 8 stack <int> s; 9 int mark_stack[MAX];10 int dfn[MAX];11 int 阅读全文
posted @ 2013-03-16 11:36 zx雄 阅读(594) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1010题意:有一只狗要从起点S走到终点D 点每走过一次就会下陷,不能再走 且出口只会在时间T时开启 问狗能不能走出迷宫 S 起点 D 终点 X 墙 . 路思路:一般都会想到用深搜做,要注意的是剪枝 1) 当前步数(rank) > 时间 2) 最短距离小于时间t 3) 奇偶剪枝,x1+x2 + y1+y2 为奇数则必走奇数步数到终点 为偶数则走偶数步数到终点 4) 如果点的数量少于步数 1 #include <iostream> 2 using namespace std; 3 stru... 阅读全文
posted @ 2013-03-09 15:42 zx雄 阅读(197) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1584思路:用深搜枚举每一种情况,剪枝 难点主要在判断每种情况的合法性 1 for(i=1;i<=10;++i){2 int x;3 cin>>x;4 num[x] = i;/*用下标表示每个数字,数值记录位置5 数字则变成升序的排列6 在堆叠时若发现右边已经被使用则所要的卡牌必然再更后面*/7 } 1 #include <i... 阅读全文
posted @ 2013-03-05 14:22 zx雄 阅读(422) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1429思路:与一般的广搜的的区别是迷宫多了锁,锁的数量最多为10把,用十位表示。所以最大状态为 1K = 1024 int used[22][22][1100]; 每得到一条钥匙则会转到另一个状态,不同状态的used不会相互干扰。1 if(map[ans.x][ans.y] >= 'a' && map[ans.x][ans.y] <= 'j'){//标记找到钥匙2 ans.key = ans.key | 1<<(map[ans.x][an 阅读全文
posted @ 2013-01-22 17:42 zx雄 阅读(375) 评论(7) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1254题意:把箱子推进坑。。。思路:用广搜遍历箱子的四个方向,由于要由人推箱子 人要到箱子后面推。 所以要再用一次广搜,判断人能不能走到箱子后面。(在广搜里面嵌套广搜) 由于向四个方向移动,人和箱子的相对位置是不一样的所以要分别记录四次。 我用的是used[][]数组的值来标记。二进制哈希,上下左右四个方向用4位来标记。 每次仅判断相应的方向是否被使用过。1 void markused(Node a,int i){//标记某一方向为用过2 int x = 1<<i;3 visit[a.... 阅读全文
posted @ 2013-01-22 16:43 zx雄 阅读(684) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1401题意:给出4个点,问在一个8*8的方格中,能不能在8步以内由初始状态变换为目标状态 输入有两行,分别表示初始状态和目标. 每行有八个数字,两个数字为一组表示一个点的坐标思路:由于点只在一个8*8的方格中移动,所以每一个坐标分别有8种状态,最大状态为88 =16777216 1 #include <iostream> 2 #include <queue> 3 using namespace std; 4 struct Node{ 5 int x; 6 int ... 阅读全文
posted @ 2013-01-19 15:38 zx雄 阅读(701) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/qiufeihai/ 阅读全文
posted @ 2012-12-23 13:27 zx雄 阅读(144) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/maiyuetong/ 阅读全文
posted @ 2012-12-23 13:26 zx雄 阅读(101) 评论(0) 推荐(0) 编辑