ACM_回溯
文章平均质量分 82
_天道酬勤_不忘初心
这个作者很懒,什么都没留下…
展开
-
最少猎头拿到全部简历问题
题目 已知猎头跟简历的对应关系,猎头手中的简历可能重叠。找到能获取全部简历的最少猎头 eg: A 1 2 3 4 B 2 3 5 C 4 5 6 D 5 6 7 8 E 1 4 6 result: [A, D] 贪心有可能拿不到最优解,用回溯可以拿到最优解 public class ForShow { public static void main(String[] args) { ...原创 2020-03-26 17:15:06 · 482 阅读 · 0 评论 -
HDU 2553 N皇后问题
题目地址:点击打开链接 思路:经典回溯吧,就是数据得预处理,不然会超时 AC代码: #include using namespace std; int c[20]; int n,sum; void backtrack(int m) { int i,j,ok; if(m == n) { sum++; return; }原创 2015-07-23 10:26:26 · 398 阅读 · 0 评论 -
HDU 3419 The Three Groups(回溯+减枝)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3419 思路:注意减枝就行,不然会TLE AC代码: #include #include #include #include #include #include #include #include #include #include #include const int in原创 2016-05-08 17:57:47 · 650 阅读 · 0 评论 -
HDU 1175 连连看(BFS或DFS)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1175 思路:BFS或者DFS,wrong了,有时间改 错误代码: #include #include #include #include #include #include #include #include #include #include #include cons原创 2016-03-06 10:58:09 · 441 阅读 · 0 评论 -
HDU 1455 Sticks(回溯,减枝很巧妙)
题目地址:点击打开链接 题意:小明拿来几根相同长度的棍子,然后把这些棍子截成好几节,问最后能拼成几根长度相同的棍子(要求这些棍子的长度最小) 思路:和HDU1518相似,可以看本博客,那道题解写的比较详细,这不过这道题得在那道题上多加几个减枝才能A AC代码: #include #include #include #include #include #include #incl原创 2015-10-31 11:35:20 · 706 阅读 · 0 评论 -
HDU 1016 Prime Ring Problem
题目地址:点击打开链接 思路:回溯,用a数组保存素数的值 AC代码: #include #include int a[40],b[20],vis[20],n; void dfs(int cur) { int i; if(cur == n && a[b[n-1]+b[0]]) { for(i=0; i<n-1; i++) { printf("%d ",b[i]); }原创 2015-07-25 11:00:40 · 327 阅读 · 0 评论 -
HDU 1518 Square(回溯搜索,减枝很巧妙啊)
题目地址:点击打开链接 题意:给你n个棍子,这些棍子的长度告诉你,问把这个棍子全都用上,能否组成一个正方形 思路:用回溯一般就是求可能情况(这种情况能否组成),所有组成情况的最值,能组成这种情况的个数(八皇后问题),这道题的减枝想到了还容易wrong,注意看我注释掉的部分,减枝比较容易想,每次只找比它长的,因为组成一条正方形的边的长度肯定有长有短,而这道题只求可能情况,所以这种减枝方法可行原创 2015-10-27 18:59:35 · 518 阅读 · 0 评论 -
HDU 5386 Cover(求一个初始状态数图到另一个终止状态数图所需的步骤)
题目地址:点击打开链接 思路:暴力模拟每种步骤到最后判断,其实没有必要,因为从初始到终止肯定有一种步骤,从终止到初始回溯就行,给图赋值的时候要从1开始循环,因为步骤里面图的行数和列数都是从1开始搞的 AC代码: #include #include #include using namespace std; int map1[110][110],map2[110][110]; cha原创 2015-09-14 13:33:03 · 405 阅读 · 0 评论 -
HDU 5339 Untitled
题目地址:点击打开链接 思路:回溯,就是刚开始要从小到大排序一下,因为先对小数取余再对大数取余没意义,这道题数据比较水,看到有人从小到大枚举过了,随便写了一组数据就测出来错误,却能AC AC代码: #include #include #include #include #include using namespace std; int n,a[21],visit[21],min原创 2015-08-19 23:15:21 · 395 阅读 · 0 评论 -
HDU 5305 Friends
题目地址:点击打开链接 思路:先贴一下官方题解, 最多搜17条边没太搞懂,感觉是对点深搜才能用到,对边深搜用不到 题意是给了n个人,m个关系,这种关系可以是线上关系,也可以是线下关系(题目只说了是朋友关系,害得我半天才搞明白),然后使每个人的线下和线上关系的人数相同,问有多少种方法,扯点题外话,DFS一般是求可能性,即从这个点走到那个点是否可能,而后求方法的可能性,这样就变成了回溯,原创 2015-09-08 09:52:32 · 336 阅读 · 0 评论 -
HDU 1010 Tempter of the Bone
题目地址:点击打开链接 思路:普通回溯要超时,用到奇偶减枝,网上资料比较多,说我的理解:判断起始点到终点的最短步数,无论偏移几格,偏移的步数一定为偶数,所以最短走的路和要走的路奇偶性相同,所以他们的和或差就相同,不相同就可以直接回溯; AC代码: #include #include #include #include using namespace std; char lol[8][8]原创 2015-07-23 16:22:51 · 387 阅读 · 0 评论 -
HDU 1584 蜘蛛牌
思路:挺好的一题,参考2位大神的代码敲出来的,虽然第二位大神的代码有点瑕疵,他说的不应该回溯的地方和应该回溯的地方其实是一个效果,每张牌去找它可以放的位置,用visit标记,如果visit【3】=0,而visit【4】到visit【6】等于1,那么3直接去找7就行了,因为4和6放在7的上面了,还有就是减枝。 AC代码: #include #include #include #include原创 2015-07-30 11:49:17 · 688 阅读 · 0 评论 -
HDU 1572 下沙小面的(2)
题目地址:点击打开链接 思路:简单回溯,把所有的路找出来比较就行,数据很小,不会超时 AC代码: #include #include using namespace std; int map[35][35]; int visit[35]; int sum1,sum2,ncity; void dfs(int num,int sum,int count) { int i;原创 2015-07-29 18:50:17 · 432 阅读 · 0 评论 -
HDU 1015 Safecracker
题目地址:点击打开链接 思路:本来挺简单的,结果犯了一个大错误,把错误代码也贴上来,要求按字典序最大,只要刚开始从大到小排序就行 ,还有就是明白了老师为啥告诉我们要好好学英语,这样就能用英语定义变量了,不只用a,b,c,d,cf,lol,这些破词来定义了,代码把cf敲成c,结果害的我调了2个小时,每个代码都是一部血泪史啊 错误代码1: #include #include #include i原创 2015-07-25 14:19:12 · 316 阅读 · 0 评论 -
HDU 1258 Sum It Up
题目地址:点击打开链接 思路:好题,一步一步分析,把我错误的代码也贴上来,便于深入理解 错误代码1: #include #include int t,visit[15],n,a[15]; void dfs(int l) { int i,flag = 1; if(l > t) return; else if(l == t) { for(i=0; i<n; i++) {原创 2015-07-25 11:33:38 · 310 阅读 · 0 评论 -
HDU 1045 Fire Net
题目地址:点击打开链接 思路:好题 AC代码: #include using namespace std; int ibest,m; char a[5][5]; bool canput(int x,int y) { int i; for(i=y-1;i>=0;i--) { if(a[x][i]=='o') return false; if(a[x][i]=='X')原创 2015-07-25 11:06:15 · 338 阅读 · 0 评论