算法竞赛入门
文章平均质量分 52
右边是我女神
笔记仓库
展开
-
算法竞赛入门经典 第七章小结
(1)掌握子串的枚举:两个循环,分别找到开头和结尾。(2)明确枚举条件,缩小枚举范围。目标:给定集合求集合的排列。(1)掌握排列生成的方法:集合元素不重复,集合元素重复。(2)掌握解答树目标:给定集合,求集合的子集。(1)掌握子集生成的增量法、位向量法和二进制法。回溯法是思想,常通过递归来实现。回溯:一个问题推导出多种可能,则选中其中一种可能继续推导。如果一条路到达尽头,则回到起点,选择另外的路径继续推导,直到所有可能被推导完毕。回溯有剪枝的功能。优势:边生成、边测试。经典问题:八皇后问题。经典问题:八数原创 2022-06-04 23:38:32 · 125 阅读 · 0 评论 -
汉明重量(位1的个数)
文章目录逻辑运算符与位运算符汉明重量位1的个数逻辑运算符与位运算符逻辑非(!)、逻辑与(&&)、逻辑或(||),针对的是左侧或左右两个表达式的结果。位运算符功能~位求反<<左移>>右移&位与^位异或|位或左移运算符在右侧插入值为0的二进制位、右移运算符的行为则依赖于其左侧运算对象的类型:如果是无符号类型,在左侧插入值为0的二进制位;如果是带符号类型,在左侧插入符号位的副本或值为0的二进原创 2022-02-09 01:13:41 · 905 阅读 · 0 评论 -
三角形的最大周长
题目:给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。从序列中找出满足条件(组成三角形)的最优解(最大周长)。这看似是一个NP完全问题,我们可以选择贪心算法得到答案。int largestPerimeter(vector<int>& nums) { sort(nums.begin(),nums.end()); for(int i=nums.siz原创 2022-02-09 11:59:18 · 596 阅读 · 0 评论 -
下一个更大的元素(单调栈)
文章目录单调栈题目单调栈单调栈的介绍及应用单调栈的单调增和单调减都是从栈顶至栈底来看的。#include <stack>#include <vector>#include <iostream>using namespace std;stack<int, vector<int>> get_monotoneStack(vector<int>& arr);int main() { vector<int&g原创 2022-02-12 14:35:56 · 356 阅读 · 0 评论 -
前缀和算法(所有奇数长度子数组的和)
文章目录题目前缀和题目给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。子数组 定义为原数组中的一个连续子序列。请你返回 arr 中 所有奇数长度子数组的和 。前缀和假设我们有一个整型数组arr,另有一个数组preSum存储该数组的前缀和,也就是说preSum[j]=∑i=0j−1arr[i]preSum[j]=\sum_{i=0}^{j-1}arr[i]preSum[j]=i=0∑j−1arr[i]我们记preSum[0]=0preSum[0]=0preSum[0]=0,原创 2022-02-12 19:26:56 · 405 阅读 · 0 评论 -
数论初步与例题
文章目录Eratosthenes筛法唯一分解定理&分解质因数扩展欧几里得算法模数&同余模数同余Eratosthenes筛法#include <iostream>#include <cmath>#include <cstring>using namespace std;#define MAX 10000int N;int not_prime[MAX];void Eratosthenes(int n){ int m = sqrt(n+原创 2022-05-13 10:02:49 · 145 阅读 · 0 评论 -
迭代加深搜索
文章目录埃及分数问题代码基于此题对迭代加深搜索的思考针对该题的一些注意点基于百度百科对迭代深化搜索的理解编辑书籍我在思考中的疑惑代码解答埃及分数问题代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cassert>using namespace std;int a, b, maxd;typedef long原创 2022-04-20 18:55:21 · 661 阅读 · 0 评论 -
路径寻找问题
文章目录关于图的路径寻找问题八数码问题代码流程图重点查重哈希技术关于图的路径寻找问题图与树的最大差别在于图没有层次结构,说不定当前的节点的子节点就是上上层的某一个节点。所以说,对于图来说,如何查重是很重要的。对于路径寻找问题,深度优先可以帮助我们找到一条路径,而广度优先可以帮助我们找到一条最短的路径。八数码问题代码// 八数码,使用STL集合,最好写#include<cstdio>#include<cstring>#include<set>using原创 2022-04-19 15:22:02 · 792 阅读 · 0 评论 -
暴力求解法—子集生成
文章目录增量构造法位向量法二进制法总结增量构造法逐渐将要选择的元素加入特定的数组中去,所以每一次选择都要输出一次结果。#include <iostream>using namespace std;int cnt = 0;void print_subset(int n, int A[], int cur){ for(int i=0;i<cur;i++) printf("%d ",A[i]); printf("\n"); cnt++;原创 2022-04-13 15:32:27 · 121 阅读 · 0 评论 -
暴力求解法—排列枚举
生成1~n的排列#include <iostream>using namespace std;void print_permutation(int n, int A[], int cur){ if(cur == n){ for(int i=0; i<n; i++) printf("%d ",A[i]); printf("\n"); } else for(int i=1; i<=n; i++){原创 2022-04-12 15:14:42 · 143 阅读 · 0 评论 -
暴力求解法-简单枚举
文章目录UVa725题目的分析大佬的方法我的答案总结UVa 11059题解Uva 10976我的思路UVa725题目的分析看似我们需要枚举10!10!10!个数。实际上,我们可以枚举出fghijfghijfghij就可以算出abcdeabcdeabcde。如果abcde中的数有重复、与fghij有重复以及超过了5位,那么都认为是不符合要求的。另外,关于输入,其要求能够循环输入,直至遇到0代表着终止。大佬的方法#include<cstdio>#include<cstring&原创 2022-04-11 15:31:15 · 573 阅读 · 0 评论 -
Abbott‘s Revenge
/* SAMPLE 3 1 N 3 3 1 1 WL NR * 1 2 WLF NR ER * 1 3 NL ER * 2 1 SL WR NF * 2 2 SL WF ELF * 2 3 SFR EL * 0 NOSOLUTION 3 1 N 3 2 1 1 WL NR * 1 2 NL ER * 2 1 SL WR NFR * 2 2 SR EL * 0 END */#include <iostream>#include <cstring&原创 2022-04-09 20:34:18 · 352 阅读 · 0 评论 -
根据中序及后序构建树及深度优先
#include <iostream>#include <vector>#include <stack>#include <cstdio>#include <string>#include <sstream>using namespace std;vector<int> in_order,post_order;int minimum = 10000;struct Node{ int val;原创 2022-04-07 14:43:31 · 778 阅读 · 0 评论 -
关于“对拍”的几个重要组成部分
文章目录对拍算法文件数据生成器批处理文件对拍对拍需要四个组成部分:算法文件;用于比较的、简易的算法文件;数据生成器;批处理文件。算法文件/* 题目描述:输入n个整数,现在有m个形如[x,y]的提问,即问第x个数到第y个数之和是多少?现在需要你写一程序对每个提问做出快速回答。 1<=n<=100000 1<=m<=50000 输入格式:第一行,两个整数n和m 第二行,n个空格间隔的整数,每个整数的范围在[-10000,10000]之间 接下来m行,每行两个整数原创 2022-04-06 18:42:59 · 186 阅读 · 0 评论