摘要:
原题链接 考察:dfs+剪枝 思路: 很像小猫爬山的分组问题,但这里只考虑一组.涉及剪枝: 排除冗余:组合型枚举 最优剪枝: 如果前面所有物品和+当前w都<ans return 搜索顺序剪枝:很明显从大到小搜索. 注意这道题最优性剪枝不能是当前w<ans return. 因为可能n个小的拼凑出更大的 阅读全文
摘要:
原题链接 考察:dfs+剪枝 错误思路: 用bfs解此题,会WA,因为我们要时间为T时刚刚好到达,bfs是最短时间.这道题需要我们在D周围绕圈子 思路: 直接暴力TLE了.所以需要一些剪枝. 当时间==T时回溯 这个剪枝比较关键,奇偶剪枝,如果S坐标之和的奇偶与D奇偶相同,说明我们到达D需要偶数步, 阅读全文
摘要:
原题链接 考察:dfs+剪枝 思路: 首先明确暴力的思路,我们枚举每一层的r与h,求出所有满足V=N的表面积(dfs本质是暴力,我们所要做的就是剪枝).接下来考虑一些剪枝: 搜索顺序的剪枝.当我们当前枚举的体积很大时,剩下能找的r、h体积就必须尽量小,这样可以优化搜索顺序. 最优性剪枝:当s>=an 阅读全文
摘要:
原题链接 考察:dfs+剪枝 思路: 写dfs先定搜索顺序,很明显我们需要枚举和,一共64个木棒,如果暴力枚举是264,必然TLE,因此在枚举和时就需要优化.可以发现如果这些木棒能拼成等长的大木棍,那么所有木棒的和一定是大木棍的倍数.由此我们只需要枚举sum的约数.定下搜索顺序后,就是将木棒分成等长 阅读全文
摘要:
原题链接 考察:dfs+剪枝 错误思路: 一开始是想按行搜或者九宫格搜.但是只能想到每九个格子搜一次看有哪些数字,再dfs 没想到位运算优化. 正确思路: 预处理每行、每列、每个九宫格有哪些数字.用8位二进制数表示哪些数字被使用了(本每次找九格用位运算优化到O(1)).每次搜索找到分支最少的格子搜( 阅读全文
摘要:
原题链接 考察:玄学dfs 思路1: 枚举组,判定当前数能否放进当前所有组.if 能, 加入到组中 else 新创立一个组.关键在于判定组内元素与当前数是否互质,这里用乘积代表组内的元素,如果与乘积不会互质,那么与组内所有元素一定不互质.(但是感觉会爆long long,10个数字,1040,但是实 阅读全文
摘要:
原题链接 考察:dfs 时隔n年练习string 的自带函数,完全不记得substr了.... 思路: 首先注意重叠部分的长度使用是任意的.预处理出每个字符串之间重叠的最短长度.然后dfs相连即可. 判定前后缀是否相等用substr较为方便.主要有两种用法 Go 因为重合部分不能超过原字符串长,所以 阅读全文
摘要:
原题链接 考察:bfs 思路: 行走方式不同的迷宫问题,最坑的是输入的先是列数再是行数. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5 using namespace std; 阅读全文
摘要:
原题链接 考察:bfs 错误思路: 定义结构体Node,用Node里vector记录路径. 此思路会TLE,当n很大时,每次赋值都要消耗一定时间. 正确思路: 用数组记录路径,即用PII 数组记录到达该点的上一步的坐标.到时候再迭代即可. 注意:当迭代的时候,不要重新定义PII it!!!!! 最最 阅读全文
摘要:
原题链接 考察:Flood Fill + hash 思路: 首先连通点很容易找到,关键是判定星群是否相似.对计算机来说很难保存每个连通块形状再旋转比较.这里可以考虑hash映射.这里的经验值是计算连通块两两之间的距离,累加和,作为关键字.这里要用sqrt,不能直接用平方和.平方和更容易发生冲突,比如 阅读全文