随笔分类 - 算法
摘要:"46. Permutations" "47. Permutations II" 和 "Combination Sum II" 是类似的,只用递归重复数字的第一个数字,后面都是重复的解。
阅读全文
摘要:"39. Combination Sum" 这道题就是简单的回溯,需要注意的是为了避免重复结果以及降低时间复杂度,可以先对cans数组进行排序,然后每次回溯的时候从chs数组的最后一个元素在cans数组中的位置开始进行,这样就保证了解序列是升序,从而避免了重复回溯,因此也减少了时间。
阅读全文
摘要:Overlapping Squares我的思路:可以根据所给图形计算出图形中包含的方块的个数以及它们各自的位置,方块可以根据某一个角点的位置来确定,具体方法见 count() 函数。方块确定之后,图形的各种变化就取决于方块们的不同放置顺序了,枚举所有排列,进行模拟,看...
阅读全文
摘要:The Domino Effect回溯加剪枝。只需DFS右、下两个方向即可,可以一行一行来。弄完一行之后看下该行所有数字是否都配对了,否则剪枝。还是得细心,两个 cnt 认错了找了大半天 bug 。。。#includeusing namespace std;const...
阅读全文
摘要:Golygons回溯加剪枝。某个方向可走的条件是此方向上没有障碍物挡道,还有一点容易被忽视的就是不能落到之前到过的点上!!!最重要的剪枝就是每走一步就判断一下剩下的步数是否有可能回到原点,还有就是如果提前到达原点也要剪掉。#includeusing namespace...
阅读全文
摘要:Firetruck回溯即可,不过要注意先判断是否可以到达着火点,如果到不了那就没必要回溯了,可能给的数据比较坑,到不了的数据比较多,不判断的话会超时。还有就是输出的格式和样例给的竟然不一样,真是醉了。#includeusing namespace std;const ...
阅读全文
摘要:The Morning after Halloween直接BFS会超时,题目中提示过墙壁很多,那么可以将所有的空格提取出来做张图,然后记录每个空格周围的邻居,这样就不用每次都判断能不能走了。优化的话可以使用双向BFS,从每次正向(从开始位置搜索)搜索一次,反向(从目标...
阅读全文
摘要:Fill#includeusing namespace std;const int maxn = 200 + 5;int T, a, b, c, d;struct node{ int v[3], dist; bool operator rhs.dist;...
阅读全文
摘要:1073D. Berland Fair每次先走一圈,计算出可以购买的糖果的总价格 c 和总个数 t,然后 cnt += t*(T/c) T %= c,循环至无糖果可买。时间复杂度计算如下:#includeusing namespace std;const int m...
阅读全文
摘要:1073C. Vasya and Robot注意如果 d 和 n 奇偶性不一致则是不可能到达的,因为机器人每移动一步,其坐标之和的奇偶性就会发生变化。#includeusing namespace std;typedef pairP;const int maxn = ...
阅读全文
摘要:Mobile Computing枚举二叉树然后计算其宽度即可,每次枚举两个节点构造一个父节点,计算宽度时需要注意的是每棵树的左节点的右边缘可能超过其右子树的左边缘,反之亦然。#includeusing namespace std;const int maxn = 12...
阅读全文
摘要:15. 3Sumclass Solution {public: vector> threeSum(vector& nums) { sort(nums.begin(),nums.end()); vector> res; i...
阅读全文
摘要:Bandwidth注意节点不一定是按字母表顺序从前到后用的,也有可能是A C 却没用B,因为这个TLE了好几次。。#includeusing namespace std;const int maxn = 26;int L,w;char s[100];int seq[m...
阅读全文
摘要:Krypton Factor注意 && 别写成 & 了。。。#includeusing namespace std;const int maxn = 80 + 5;int n,L,cnt;int A[maxn];int dfs(int cur){ if(cnt+...
阅读全文
摘要:Prime Ring Problem#includeusing namespace std;const int maxn = 17;int n;int A[maxn],vis[maxn],p[2*maxn];int isPrime(int n){ for(int...
阅读全文
摘要:Spatial Structures#includeusing namespace std;const int maxn = 64 + 5;int n,len;int seq[maxn*maxn];char img[maxn][maxn];struct node{ ...
阅读全文
摘要:Patrol Robot这个题还是DFS,不过每个状态除了记录位置之外,还要记录剩余穿越次数,这样一来就变成了三维DFS。对于值为1的点如果剩余穿越次数大于0且该状态未遍历过的话也可以访问。像这种四个方向的话用常量数组比较方便,没必要搞个二重循环,容易出bug。#in...
阅读全文
摘要:Knight MovesBFS即可,字符串数组 size 定义成了 2 导致输入一直错误,应该是无法存入'\0' 引起的,待会儿再深究。#includeusing namespace std;const int maxn = 8;typedef pair P;int ...
阅读全文
摘要:S-Trees#includeusing namespace std;const int maxn = 7;int n,m,t,cnt = 0;char s[2];int a[maxn];char b[maxn];char leaf[int(pow(2,maxn))]...
阅读全文
摘要:Tree Recovery#includeusing namespace std;const int maxn = 30;struct node{ char c; struct node* l = NULL; struct node* r = NUL...
阅读全文

浙公网安备 33010602011771号