search
文章平均质量分 66
wust_tanyao
这个作者很懒,什么都没留下…
展开
-
poj 1088 滑雪(简单dfs)
给一个矩阵 任选起点终点 求最长的递减的数列有多长 #include #include #include using namespace std; int dr[4]={-1,1,0,0},dc[4]={0,0,-1,1}; int h[110][110];//记每个点高度 int len[110][110]; int r,c; bool over(int a,int b)//判断原创 2013-07-08 16:42:04 · 817 阅读 · 0 评论 -
AOJ0118 Property Distribution 裸dfs
Description タナカ氏が HW アールの果樹園を残して亡くなりました。果樹園は東西南北方向に H×W の区画に分けられ、区画ごとにリンゴ、カキ、ミカンが植えられています。タナカ氏はこんな遺言を残していました。 果樹園は区画単位でできるだけ多くの血縁者に分けること。ただし、ある区画の東西南北どれかの方向にとなりあう区画に同じ種類の果物が植えられていた場合は、区画の境界が分からないの原创 2014-01-08 11:33:09 · 1011 阅读 · 0 评论 -
poj3134 Power Calculus---迭代加深dfs
可以用迭代加深思想的题目,一般是一个要用bfs的思想,但由于分支解太多,而所求解一定会在浅层出现, 所以可以对层数递加,dfs该层是否找得到解。 #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f usin原创 2014-01-09 11:35:46 · 1067 阅读 · 0 评论 -
poj 2676 数独 ---dfs
每行 每列 每个小九宫格里 某个数字是否存在 记录下来 #include #include #include #include #include #include #include #include #include using namespace std; int r[10][10],c[10][10],s[10][10],ma[10][10],zero;原创 2014-01-08 21:17:44 · 851 阅读 · 0 评论 -
hdu2337 Escape From Enemy Territory---二分bfs+预处理
题意: 地图中有一些点危险,要从起点走到终点,且离危险点最近的距离最大,求出此时的最短路径。 思路: bfs,重点是如何处理要使离危险点的距离最大,直观的想法是对 离危险点的距离的所有可能从小到大都尝试下,能求得通路的解里面,离危险点距离最大的情况就是正确解。 因此,可以对地图上每个点到危险点的距离预处理一下。 在尝试通路的过程中,可以用二分的方法来取这个离危险点的距离,感觉很好原创 2014-01-08 21:27:31 · 1007 阅读 · 0 评论 -
zoj 1019 Illusive Chase --- dfs
永远都看不清楚nx ny #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f using namespace std; int dx[]={0,0,-1,1}; int dy[]={-1,1,0,0};原创 2014-01-10 14:08:26 · 900 阅读 · 0 评论 -
ural 1500 Pass Licenses --- 状态压缩dfs
这方法真好啊。。 有n个点,m条路,k个执照,每条路都属于一些执照(拥有指定执照才能走) 求从0走到1 最少需要哪些执照 枚举 1到1 对每一种组合dfs 取二进制中1最少的解咯 代码很简洁 但熟练运用二进制总是需要多多练习的事。。 #include #include #include #include #include #include原创 2014-01-10 14:21:42 · 950 阅读 · 0 评论 -
poj 1014 && zoj 1149 Dividing --- dfs剪枝
首先 dfs思路比较简单 目的是要凑出sum/2 贪心的想法 从价值大的往小的选 一次选的尽量多个 这样的话 方法是正确的 因为石子数量庞大 会超时 需要一个强有力的我永远都想不到的剪枝╮(╯▽╰)╭ 某大神的想法: 以第一步选择价值为6的石子为例,如果接下去的选择价值为5的石子的数量超过6个,则我们可以用5个价值为6的石子替代;同样,如果再接下去的选择价值为4的石子的个子超过3个,我们也原创 2014-02-11 23:00:35 · 1110 阅读 · 0 评论 -
hdu 1087 zoj 1107 FatMouse and Cheese
#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f #define ll __int64 using namespace std; int mp[105][105],d[105][105],n,k; int dx[]={1,原创 2014-02-11 22:48:41 · 969 阅读 · 0 评论 -
zoj3781 Paint the Grid Reloaded --- 缩点 bfs
╮(╯▽╰)╭水题 相连的相同色块缩成点,和相邻的不同色块建边。 以每一个点为起点bfs,求最小答案。 #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f #define ll long long #define原创 2014-05-05 23:11:56 · 1182 阅读 · 0 评论 -
hdu2489 Minimal Ratio Tree
哎 直接枚举所有m个点 求最小生成树 按题意来就行了。。 在存点的编号 用点的编号的地方wa了好久好久。。 #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f #define ll __int64 usi原创 2014-03-11 21:56:15 · 763 阅读 · 0 评论 -
hdu2437 Jerboas --- dfs
给一个有向图,起点,和一个数k。 每个点可能是T或P,保证起点是T,要求走到P的路径中 路径长度是k的倍数且最短的距离和终点编号。 直接dfs水过 #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f #d原创 2014-04-21 20:56:45 · 872 阅读 · 0 评论 -
hdu 1429 状压bfs
#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f #define ll __int64 #define mod 1000000007 using namespace std; struct node { int x原创 2014-06-26 11:06:29 · 707 阅读 · 0 评论 -
hdu 1728 bfs
#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f #define ll __int64 #define mod 1000000007 using namespace std; struct node { int x原创 2014-06-26 11:05:08 · 663 阅读 · 0 评论 -
hdu4294 Multiple 数学结论 bfs
#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f #define ll __int64 #define mod 1000000007 using namespace std; int n,k,cnt,num[2],len[原创 2014-06-26 11:10:03 · 724 阅读 · 0 评论 -
zoj1003 Crashing Balloon
《题解》上的题,重点是分析清楚输赢的规则。 用两个bool变量表示两人是否说了实话,dfs,如果b说了实话且a没说实话则b赢,其余都是a赢。 #include #include #include using namespace std; int n,m,f1,f2; void dfs(int a,int b,int num) { if(a==1&&b==1)//有一种解是两人都原创 2014-10-24 14:12:17 · 1003 阅读 · 0 评论 -
poj3009 Curling 2.0---bfs
#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f using namespace std; int ans,a[25][25],sr,sc,er,ec,n,m,step; int dx[]={1,-1,0,0}; int原创 2014-01-08 11:30:52 · 924 阅读 · 0 评论 -
poj3187 Backward Digit Sums---dfs暴力枚举
这题感觉我的方法真的好死。。其实也可以用next_permutation函数全排列一遍 很方便 写出来也漂亮 #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f using namespace std; int原创 2014-01-08 09:55:46 · 884 阅读 · 0 评论 -
poj2488 A Knight's Journey(简单dfs)
给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径。 注意字典序。 #include #include #include using namespace std; int dx[8]= {-1,1,-2,2,-2,2,-1,1};//按字典顺序走必须这么写 int dy[8]= {-2,-2,-1,-1,1,1,2,2}; int way[50原创 2013-07-08 16:46:59 · 743 阅读 · 0 评论 -
hdu1557 权利指数(状态压缩)
开始看到这题写的是dfs 后来又看到母函数 然后看到觉得状态压缩应该也可以 总的来说 这题真的很简单。。想想都可以直接暴力的。。 就是把状态用二进制表示而已 结果没想到 不用全部状态存下来 再减一个比一个 直接跟sumw/2 比较就知道相对大小了 哎。。。 #include #include #include using namespace std; int sumw,n; int原创 2013-07-15 12:35:22 · 896 阅读 · 0 评论 -
poj3895 Cycles of Lanes
题意:给一个图找最大环的长度 简单dfs 一个点在一个环里只会出现一次 先假设一个点为可能存在的一个环的起点 然后沿起点往下走 每个点标记一个到起点的距离 如果环存在 就可以一直下去找到 vis[a]-vis[x]+1 就是该点a到起点x的距离 存下这个距离ans 接着换一个起点找环 以此类推 如果环不存在 那么ans值一定 #include #include #inclu原创 2013-07-18 10:27:21 · 800 阅读 · 0 评论 -
hdu4431 Mahjong 枚举搜索。。
japanese麻将什么玩意。。都没有豪华七对。。。 没什么难的 就是枚举搜索了 分三种类型的胡牌 f1是七对 f2是十三幺 f3是普通的胡牌 就先找一对 再找三个三个的 就是一直超时。。在峰峰的指导下加了好多剪枝 注释都标出来了。。这样才过 而且好慢。。 #include #include #include #include #include #include #i原创 2013-08-20 14:47:11 · 1224 阅读 · 2 评论 -
codeforces 132C Logo Turtle--- dp dfs
题意: F表示前进一步,T表示变成反方向 给一串FT字符,和一个n,表示可以改变多少次 改变就是F变成T、T变成F 关键: dfs(int d,int pos,int i,int cnt) dp[][][][] 依次表示,方向、最长距离、到字符串的哪一个点了、还剩多少改变次 因为你每到一步,下一步只有两种情况: 一种是方向改变,pos不变 一种个是方向不变,pos朝原创 2013-08-09 11:28:57 · 1398 阅读 · 0 评论 -
poj1190 生日蛋糕 dfs
题意:生日蛋糕有m层,总体积是V。从下向上,每一层的半径r和高度h都是递减的。 给m、v,求最小的表面积s。(不算底面接地的面积) 题目链接:poj1190 剪枝都还没加。。样例输出都是错的。。。还没找到问题。。。 #include #include #include #include #include #include #include #include原创 2013-08-23 14:41:54 · 984 阅读 · 0 评论 -
hdu4620 Fruit Ninja Extreme---dfs
看到水果忍者一激动,这么长题目一气呵成。。结果后来才知道好多地方理解错了意思。 题意: 首先,一刀切三个或三个以上,连续(两刀之间时间差 要求算最多可以连续切三个或三个以上多少刀。 给的是:n,m,w 一共多少刀,一共多少水果,两刀时间差的最大值 然后每行 c,t,c1,c2,c3......表示t时刻切了一刀,这一刀切了c个水果,分别编号是c1,c2,c3.....原创 2013-08-26 19:29:18 · 998 阅读 · 0 评论 -
poj3411 Paid Roads---dfs
题意: n个城市,要从1走到n m条有向路,从ai到bi若经过了ci,则花费为pi,否则花费为ri 求最小花费 这题难点在于“城市与城市之间可能存在多条路径”: 1、 输入数据时可能会出现多条 从城市a到城市b的路径信息,但是费用有所差别; 2、 对于 从城市a到城市b 的同一条路径,允许重复走。 同一条路可以重复走,但可能出现无限重复走的情况,即出现环路。原创 2013-08-28 20:20:24 · 871 阅读 · 0 评论 -
poj 1947 Rebuilding Roads ---树形DP
题意:给一棵树,求最少去掉几条边能得到一个节点数为p的子树 dp[i][j]存以第i个结点为根(相当于没有父亲的),得到一个结点为j的子树所要去掉的边数 从下到上搜索, 考虑一个节点时,有两种选择, 要么剪掉跟子节点相连的边,则dp[i][j] = dp[i][j]+1; 要么不剪掉,则d[i][j] = max(dp[i][j], dp[i][k]+dp[son原创 2013-10-13 16:27:21 · 949 阅读 · 0 评论 -
HDU4751 Divide Groups---bfs
e[i][j]表示两个人认不认识 vis=1或0 表示分在哪个组 枚举所有点作为起点 分在1组内 然后bfs啦 #include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f typedef __int64 ll; us原创 2013-10-21 20:50:54 · 848 阅读 · 0 评论 -
poj1011 Sticks---dfs
剪枝啊剪枝 #include #include #include #include #include #include #include #include #include using namespace std; int vis[70],n,a[70],tmp; bool cmp(int x,int y) { return x>y; } int dfs(原创 2013-12-09 13:16:43 · 706 阅读 · 0 评论 -
poj2918 Tudoku---dfs
数独的思路特简单 就dfs啊 遇到要填的地方就填一个该行该列都没有的数 一直填下去 有找不到的就回溯 重新填 把每个点可以填的数预处理了一下 就没有用到剪枝什么的。。 #include #include #include #include #include #include #include #include #include using原创 2013-12-09 13:25:03 · 847 阅读 · 0 评论 -
poj3278 Catch That Cow---bfs
这个 代码混乱。。好歹过了 #include #include #include #include #include #include #include #include #include using namespace std; struct node { int cnt; int mm; }tmp; queue q; int n,vis[10001原创 2013-12-09 13:12:22 · 837 阅读 · 0 评论 -
poj2064 Gap---bf
给一个4*8的矩阵,求移动到目标状态的最小次数。 每次操作可以将一个数换到空格处,这个数只能是 值等于空格左边+1的那个数,而且不能是*7+1. 有点像规则略有不同的拼图游戏,bfs的思路很好想,每个图有四种移动的可能(四个0的地方可以变换),记录下来,依次与目标状态比较就可以得到结果了 但重点是 状态怎么存呢。。 于是这里参考胖富帅的状态压缩思想,把这个矩阵给hash一下 但是原创 2014-01-07 16:26:08 · 896 阅读 · 0 评论 -
poj2718 Smallest Difference
把10个以内的个位数组合成两个数 使差最小 看起来就可以暴力。。 这里用了一个 next_permutation函数 这是一个求一个排序的下一个排列的函数,可以遍历全排列 要注意的是,必须从最小字典序开始,才能所有情况都遍历完 #include #include #include #include #include #include #include #原创 2014-01-07 18:09:26 · 924 阅读 · 0 评论 -
22 poj2935 Basic Wall Maze --- bfs
对于每个点有四个方向可以走,把墙两边的点对应墙的方向能不能走给预处理一下,用vis[x][y][0..3]表示点(x,y)的该方向可不可以走。 然后bfs就好了,记录路径就把每个结点的前一个点记录下来,递归输出就可以了。 #include #include #include using namespace std; int dx[]={0,0,1,-1}; int dy[]=原创 2015-05-18 22:09:04 · 802 阅读 · 0 评论