摘要: /*DFS好题Date: 2012/10/14题目链接地址:http://poj.org/problem?id=1011 http://acm.hdu.edu.cn/showproblem.php?pid=1455思路:首先可以确定的是,木棍初始值的长度肯定是所有木棍段之和(假设为sum)的约数,木棍初始值的最小值 为给定木棍段的最大值(假设为max),木棍初始值的最大值为所有木棍段之和。所以从max到sum之间依次 判断是sum约数的长度是否满足题目要求即可 先给木棍段从大到小排序,这对以后的剪枝有帮助 剪枝1:在刚开始组成一个初始木棍的时候,如果某木棍段的长度小于初始木棍的长度且不满足的话 阅读全文
posted @ 2012-10-14 22:53 sorryhao 阅读(164) 评论(0) 推荐(0)
摘要: /*DFS2012亚洲区域赛长春赛区现场赛C题Date: 2012/10/14题目链接地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3657一开始因为题目理解错误(以为是题目错了)导致wa了n次,后来在看了n遍题目之后恍然大悟,输入的是Alice已经去过的山和摘的蘑菇数,没有去过的山Alice可能去摘也可能不去摘,去摘的话,摘的数量是在[0,2012]之间的这样让你求Alice回家能带的最大蘑菇数量思路:1.当n = 0,1,2,3时,最大值应该是1024,比如n = 3,假设摘的数分别为a,b,c;那么任选其中 阅读全文
posted @ 2012-10-14 21:27 sorryhao 阅读(361) 评论(0) 推荐(0)
摘要: /*DFSDate: 2012/10/12题目链接地址:http://www.cnblogs.com/sorryhao/admin/EditPosts.aspx?opt=1思路:从开始点找,一直找到门,这是判断时间是不是刚好t秒,如果是则输出YES,否则输出NO需要注意的是奇偶剪枝奇偶剪枝:http://baike.baidu.com/view/7789287.htm*/#include<iostream>#include<cmath>using namespace std;#define maxn 8char matrix[maxn][maxn];int n,m,t, 阅读全文
posted @ 2012-10-12 21:57 sorryhao 阅读(152) 评论(0) 推荐(0)
摘要: /*简单DFSDate: 2012/10/12思路:和Prime Ring Problem基本一样题目链接地址:http://acm.hdu.edu.cn/showproblem.php?pid=2181*/#include<iostream>using namespace std;#define maxn 20int matrix[maxn+1][maxn+1],arr[maxn+1];bool visited[maxn+1];int m,count = 1;void dfs(int val,int num) //val为当前走的城市,num为已走的城市个数{ int i; .. 阅读全文
posted @ 2012-10-12 10:55 sorryhao 阅读(210) 评论(0) 推荐(0)
摘要: /*DFSDate: 2012/10/11题目链接地址:http://acm.hdu.edu.cn/showproblem.php?pid=1016思路:从1开始找,在从与1之和为质数的val开始,再从与val为质数的开始,当找到最后一个点时判断一下它和1是否为质数,若是则输出*/#include<iostream>#include<cmath>using namespace std;#define maxn 21bool visited[maxn];int arr[maxn];int n,count = 1;bool isPrime(int x){ for(int i 阅读全文
posted @ 2012-10-11 23:48 sorryhao 阅读(145) 评论(1) 推荐(0)
摘要: 题目链接地址:http://acm.hdu.edu.cn/showproblem.php?pid=2952/*简单DFSDate: 2012/10/11题意和上题差不多,就是求连通分量的个数*/#include<iostream>using namespace std;#define maxn 101char matrix[maxn][maxn];int n,m,t,ans;bool visited[maxn][maxn];int dir[][2] = {{0,-1},{1,0},{0,1},{-1,0}};bool ok(int i,int j){ return i >= 阅读全文
posted @ 2012-10-11 19:13 sorryhao 阅读(168) 评论(0) 推荐(0)
摘要: 题目链接地址:http://acm.hdu.edu.cn/showproblem.php?pid=1241/*简单DFS题意:就相当于求连通分量的个数*/#include<iostream>#include<algorithm>using namespace std;#define maxn 101char matrix[maxn][maxn];bool visited[maxn][maxn];int dir[][2] = {{0,-1},{1,0},{0,1},{-1,0},{-1,-1},{-1,1},{1,-1},{1,1}};int m,n;bool ok(in 阅读全文
posted @ 2012-10-11 18:36 sorryhao 阅读(191) 评论(0) 推荐(0)
摘要: 题目链接地址:http://acm.hdu.edu.cn/showproblem.php?pid=1175/*BFSDate: 2012/10/11题目链接地址:http://acm.hdu.edu.cn/showproblem.php?pid=1175思路:和逃离迷宫思路差不多,一个方向找到底哎,因为printf("N0\n"),错了n次,改了n久O写成了0*/#include<iostream>#include<queue>using namespace std;#define maxn 1001int dir[][2] = {{0,-1},{1 阅读全文
posted @ 2012-10-11 16:48 sorryhao 阅读(493) 评论(0) 推荐(0)
摘要: 题目链接地址:http://acm.hdu.edu.cn/showproblem.php?pid=1181/*DFSDate: 2012/10/10题目链接地址:http://acm.hdu.edu.cn/showproblem.php?pid=1181思路:就是题意,很简单,从首字母为b的单词开始找起,看其末尾字母是不是m,若不是则找首字母为m的单词,看其末尾字母是不是m````*/#include<iostream>#include<algorithm>#include<string>using namespace std;#define maxn 10 阅读全文
posted @ 2012-10-10 22:39 sorryhao 阅读(541) 评论(0) 推荐(0)
摘要: 题目链接地址:http://acm.hdu.edu.cn/showproblem.php?pid=2553/*DFSDate: 2012/1010思路:由题易知,每行最多只能有一个皇后,所以用x[]表示行向量,搜索从第一个行向量开始按行向量递增搜索,一直到最后一个行向量结束时得到一种放置方法,注意:要预先把合法的放置方法数保存起来,不然会超时*/#include<iostream>#include<cmath>using namespace std;#define maxn 11int num[maxn],x[maxn],sum,n;bool ok(int u) //判 阅读全文
posted @ 2012-10-10 20:35 sorryhao 阅读(158) 评论(0) 推荐(0)