ACM基础
文章平均质量分 76
sandalphon4869
这个作者很懒,什么都没留下…
展开
-
C++之vector的矩阵
文章目录创建二维矩阵上下水平翻转左右竖直翻转方阵转置方阵旋转创建二维矩阵C++之vector入门vector<vector<int>> matrix{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};上下水平翻转[123456789]\begin{bmatrix}1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}⎣⎡147258369⎦⎤变成[789原创 2021-01-24 17:51:25 · 3096 阅读 · 0 评论 -
不仅适用于方阵的回形矩阵
文章目录分析答案分析基本情况这就是全部的基本情况,之后所有都是在此基础上的变形。遍历方式对应:for (int i = p; i <= n - 1 - p; i++)中是<=(A)还是<(B)我们采用A方式,而不采用B方式。因为B方式无法处理只有一个时的情况。跳出条件设立了两个跳出判断。while的跳出是①、④、⑤、⑥if的跳出是②、③答案vector<vector<int>> matrix(6, vector<i原创 2021-01-23 18:39:04 · 85 阅读 · 0 评论 -
ACM基础之动态规划DP: 买卖股票的最佳时机 II
文章目录一、类似装配线的dp二、其实超简单一、类似装配线的dp考虑到「不能同时参与多笔交易」,因此每天交易结束后只可能存在手里有一支股票或者没有股票的状态。定义状态 dp[i][0]\textit{dp}[i][0]dp[i][0] 表示第 iii 天交易完后手里没有股票的最大利润,dp[i][1]\textit{dp}[i][1]dp[i][1] 表示第 iii 天交易完后手里持有一支股票的最大利润(iii 从 0 开始)。考虑 dp[i][0]\textit{dp}[i][0]dp[i][0转载 2021-01-23 09:01:48 · 298 阅读 · 0 评论 -
ACM基础(四):排序之桶排序 Bucket Sort
文章目录一、思路二、时间复杂度一、思路/* A:待排序数组。要求小数[0,1),均匀分布(随机生成的)。 B:已经创好的外存链表数组,共 n-1 个(是那种即使没有某些数,也会存在对应的链表的)。 */BUCKET-SORT(A) n ← length[A] // 遍历数组A,将A中每个元素插入到链表B[⌊ nA[i] ⌋]中 for i ← 1 to n do insert A[i] into list B[⌊ nA[i] ⌋] // 对每个链表B[i]进行插入排序 for i原创 2020-08-16 22:30:40 · 185 阅读 · 0 评论 -
ACM基础(四):排序之基数排序 Radix Sort
文章目录一、思想一、思想按照位数从低到高排序:位数:个位、十位、百位……这个位数 Digit。从低到高:这个被称作LSD(Least Significant Digit)。PS:如果是从高到底(MSD,Most Significant Digit),那么在排高位后再排低位就得顾及高位的顺序。比如,19和21,第一次是[1]9和[2]1,第二次就是2[1]和1[9],还得按照某种复杂的规则纠正成19、21。/* A:待排序数组和输出结果 d:A中的数的最大位数 */RADIX-SOR原创 2020-08-16 21:20:15 · 220 阅读 · 0 评论 -
ACM基础(四):排序之计数排序 Counting Sort
文章目录一、思路一、思路/**A:待排序的数组B:排序好的结果C:外存数组, k表示外存数组的大小,这个大小是根据A中数的范围(最大值-最小值+1)*/COUNTING-SORT(A, B, k) // 将外存数组清零,为了后面统计个数要从0开始自增 for i ← 1 to k do C[i] ← 0 // C的下标i分别对应"A中元素值为i的值"(i==A[j]) // C中每个元素的值就是A中元素值为i的"元素个数"(C[i] = sum(A[1...length[A]原创 2020-08-16 17:27:58 · 182 阅读 · 0 评论 -
ACM基础:贪心之背包问题knapsack
文章目录一、背包问题1.描述2.难度划分三、简单:分数背包问题(Fractional knapsack)1.思路2.伪代码3.c++实现四、难:0-1背包问题(0-1 knapsack)一、背包问题1.描述小偷抢劫商店,发现n件物品,物品i价值viv_ivi美元,重量为wiw_iwi磅,小偷在背包中最多只能携带W磅重量,但他想尽可能多地携带贵重物品。他应该带哪些物品?问题符号:n...原创 2020-05-06 12:21:01 · 643 阅读 · 0 评论 -
ACM基础之动态规划DP总结
dp是先计算完底层再计算上层,但这些底层可能不一定都用到。关键是有个计算完所有底层的表。递归+记忆是递归的过程种计算底层再存储起来,这些底层是只有被用到的才会被选择计算,不一定所有的都会被计算到。这个记忆化的东西虽然和dp的表一样都是用来存储访问的,但它是在计算上层的过程中需要下层时才计算存储的,而且不一定有所有的底层。...原创 2020-05-06 08:18:08 · 423 阅读 · 0 评论 -
ACM基础之动态规划DP:Max sum 最大和
文章目录用sum表示最大的和(全局最优),b表示局部最优。关键就是max(b+a[j],a[j]),遍历数组元素时,大于0就是前者,小于等于0后者#include <iostream>#include <vector>#include <string.h>using namespace std;// n个数,a数组int DPMaximumS...原创 2020-05-05 22:28:26 · 354 阅读 · 0 评论 -
手写优先级队列
文章目录#include <iostream>using namespace std;// 基于max-heaps大顶堆,key表示class PriorityQueue{public: // 返回最大key值的元素,即队首 int MAXIMUM(); // 弹出队首并返回队首 int EXTRACT_MAX(); // 增...原创 2020-05-05 20:38:18 · 408 阅读 · 0 评论 -
ACM基础之动态规划DP:LCS最长公共子序列和最长子串
文章目录伪码C++伪码// X,Y是字符串LSC-LENGTH(X, Y): m ← length[X] n ← length[Y] // 初始化边界,用于下面开始i=0时的c[i-1,j-1]之类的获取0值 // 初始化列为0,空过c[0,0] for i ← 1 to m do c[i,0] ← 0 // 初始化行为0,顺便填上c[0,0] for j ← 0 to...原创 2020-05-05 18:39:22 · 412 阅读 · 0 评论 -
ACM基础之动态规划DP:矩阵链乘法Matrix-chain multiplication
文章目录ReferenceInstead, use a dynamic program to fill in a table m[i,j]:Start by setting m[i,i]=0 for i = 1,…,n.Then compute m[1,2], m[2,3],…,m[n-1,n].Then m[1,3], m[2,4],…,m[n-2,n],…… so on t...原创 2020-05-04 23:09:15 · 803 阅读 · 0 评论 -
ACM基础之动态规划DP:装配线调度Assembly-Line Scheduling
文章目录理解:fi[j]f_i[j]fi[j]是已经通过了站点Si,jS_{i,j}Si,j的,已经把该站点的通过代价算进去了。FASTEST-WAY(a, t, e, x, n): // 通过两条流水线各第一个站点的代价 f1[1] ← e1 + a1,1 f2[1] ← e2 + a2,1 // 从第二个到最后一个站点的各站点的通过代价 for j ← 2 to ...原创 2020-05-04 21:06:34 · 1768 阅读 · 0 评论 -
ACM基础(四):排序之快速排序
文章目录一、伪代码1.PATITION2.quickSort二、C++实现一、伪代码1.PATITION意义:就是通过pivot将数组分成两部分,前面的一部分小于等于pivot,后面的一部分大于pivot。将倒数第一作为 轴 pivot建立两个哨i(开始再往前一个)(i+1表示大于pivot的元素)、j(遍历的、从开始到倒数第二)(表示当前小于等于pivot的元素)遍历j:如果元素...原创 2020-05-04 09:18:36 · 372 阅读 · 0 评论 -
有向图的连通性
文章目录无向图:连通图:无向图中,如果任意两点是连通的,那么图被称作连通图。有向图:弱连通:有向图的底图(无向图)是连通图,则是弱连通图。单向连通:有向图中,任意结点对中,至少从一个到另一个是可达的,就是单向连通。强连通:有向图中,强连通图是任意对中都互相可达。PS:弱连通图不一定是单向连通。...原创 2020-04-21 16:17:47 · 19064 阅读 · 1 评论 -
ACM基础(四):排序之堆排序(用数组存储层序遍历的堆)
文章目录一、用数组存储层序遍历的堆1.按层序遍历2.算左子节点、算右子节点、算父节点的下标(1)伪代码结果(2)C++二、堆1.大顶堆和小顶堆2.堆的高度和层三、大顶堆排序算法1.MAX-HEAPIFY2.BUILD-MAX-HEAP3.堆排序算法4.时间复杂度四、C++实现一、用数组存储层序遍历的堆1.按层序遍历2.算左子节点、算右子节点、算父节点的下标(1)伪代码结果设i为本...原创 2020-04-20 22:07:11 · 838 阅读 · 0 评论 -
C/C++选择部分数组元素为指定的值:memset()和fill()
文章目录一、memset()1.头文件2.函数原型3.使用(1)赋值int数组(2)赋值char数组(3)结构体二、fill()1.头文件2.函数原型3.例子(1)数组三、总结1.都可以挑选位置设置2.sizeof()的陷阱Reference一、memset()C/C++通用1.头文件C:#include<string.h>C++:#include<cstring&g...原创 2020-04-09 14:21:42 · 2648 阅读 · 0 评论 -
ACM中的无穷大常量:0x3F3F3F3F
文章目录不用INT_MAX采用INT_MAX(#include<limits.h>),即0x7fffffff(2147483647)作为无穷大。但是以INT_MAX为无穷大常常面临一个问题,即加一个其他的数会溢出。用0x3f3f3f3f(1061109567)和INT_MAX一个数量级,即10910^9109数量级,10亿INT_MAX - 2 * 0x3f3f3f...原创 2020-04-09 09:56:20 · 478 阅读 · 0 评论 -
图算法:最短路径算法之dijkstra
文章目录图论单源点最短路径问题Single-source shortest paths1.限制2.思想:贪心3.算法图论图G=(V, E)。顶点(就是结点)V,边E,权值w。路径p:v1→v2→...→vkv_1 \to v_2 \to ... \to v_kv1→v2→...→vk,其w(p)=_i=1...k−1w(vi,vi+1)w(p)=\_{i=1...k-1}w(vi,...原创 2020-04-07 16:23:34 · 1056 阅读 · 0 评论 -
C/C++获取int数组元素的个数
文章目录一、非参数数组二、参数数组1.问题2.解决方法(1)全局变量数组(2)增加一个参数length(3)全局变量length一、非参数数组可以使用sizeof(a)/sizeof(a[0])或sizeof(a)/sizeof(int)来获取元素个数。#include <iostream>using namespace std;int a[] = {1, 2, 3};...原创 2020-03-11 22:26:02 · 21695 阅读 · 3 评论 -
ACM基础(四):排序之归并排序
文章目录图解排序算法(四)之归并排序原创 2020-02-26 12:47:33 · 373 阅读 · 0 评论 -
ACM基础(四):排序算法总结
文章目录ReferenceACM基础(四):排序之插入排序ACM基础(四):排序之冒泡排序Reference十大排序算法-段小辉-博客园排序算法总结-菜鸟教程原创 2020-02-17 14:09:07 · 333 阅读 · 0 评论 -
ACM基础(四):排序之插入排序
文章目录一、原理二、算法特性三、复杂度四、实现Reference一、原理遍历每个元素,将其插入已经排序好的部分:内外双层循环的思路(【费曼技巧】\color{gold}{【费曼技巧】}【费曼技巧】):(外循环)遍历每个元素,下标i。(内循环)每次遍历时,其内又是一个遍历循环,决定插入到哪里和调整存储空间内循环怎么做:i前的元素都是排序好的(假设升序),将元素A[i]插入到其...原创 2020-02-17 12:12:04 · 321 阅读 · 0 评论 -
ACM基础(四):排序之冒泡排序
文章目录一、名字由来二、算法原理一、名字由来这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数据的末位(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮一样,故名“冒泡排序”。二、算法原理升序:(1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。(2)对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。(降序末...原创 2020-02-17 12:02:46 · 193 阅读 · 0 评论 -
ACM基础(四):树的遍历
文章目录一、遍历1.规则2.递归理解二、代码一、遍历1.规则中序遍历:左子树——>根节点——>右子树前序遍历:根节点——>左子树——>右子树后序遍历:左子树——>右子树——>根节点记法(遍历规则):-都是左子树在右子树前-哪个序遍历,根节点就在哪个位置:中序(,根,),前序(根,,),后序(,,根)。2.递归理解这些遍历都是递归的形式...原创 2019-06-06 20:09:29 · 308 阅读 · 0 评论 -
ACM基础(四):树之Huffman Coding哈夫曼(霍夫曼)编码
文章目录一、原理一、原理频率:原理:构造的方法就是将所有的指令按使用的频度(也就是程序中出现的概率)由小到大依次排列,每次将两个使用频度最小合并在一起,构成一个频度为两者之和的新结点,将其与余下的结点放在一起。接着再从这些结点中继续找两个使用频度最小合并在一起,构成一个频度为两者之和的新结点。重复上述过程,全部结点合并完成。...原创 2019-05-26 16:40:11 · 416 阅读 · 0 评论 -
ACM基础之最大公约数、最小公倍数
文章目录最大公约数Greatest Common Divisor(GCD)// 用于swap()#include <iostream>using namespace std;int GCD(int a, int b){ if (a < b) { swap(a, b); } while (a % b != 0) ...原创 2020-02-13 21:18:20 · 448 阅读 · 0 评论 -
C/C++之数组元素全清零实现
文章目录总结一、全局变量数组二、局部变量数组1.垃圾值2.memset()(1)头文件(2)函数原型(3)局限总结全局变量数组未初始化,则其默认值全为0.局部变量数组未初始化,则其默认值为-858993460(垃圾值),需要用memset()清零。一、全局变量数组#include <stdio.h>int a[100];int main(){ printf("...原创 2019-09-25 16:53:46 · 33668 阅读 · 0 评论 -
ACM基础之阶乘
文章目录long long factorial(int n) { long long m = 1; for (int i = 1; i <= n; i++){ m *= i; } return m;}原创 2020-02-13 17:32:51 · 176 阅读 · 0 评论 -
ACM基础之数据输入总结
文章目录一、基本输入输出1.scanf和printf①格式②标志2.cin二、一行三、单个字符输入输出1.特定函数2.基本输入四、精度一、基本输入输出1.scanf和printf①格式printf():"%<标志><域宽><.精度><转换说明符>"②标志标志含义对齐格式加上+表示输出在域宽内左对齐;不加默认表示右对...原创 2020-02-13 17:26:33 · 333 阅读 · 0 评论 -
ACM基础之判断素数
文章目录// 判断素数,0-no,1-yesint isPrime(int n){ if (n <= 1) { return 0; } for (int i = 2; i * i <= n; i++) { if (n % i == 0) { return 0; ...原创 2020-02-13 11:05:58 · 417 阅读 · 0 评论 -
【ACM基础博客列表】》》》》》》
文章目录ACM基础结构数学化简图论博弈论ACMACM六大错误分析基础结构ACM之动态数组问题ACM之大数组问题Algorithm基础之递归函数理解数学化简ACM基础:数学优化之组合数的优化图论图算法之最短路径Dijkstra算法BFS宽度优先搜索DFS深度优先遍历理解博弈论博弈论之Nim游戏...原创 2020-02-13 10:59:23 · 198 阅读 · 0 评论 -
ACM基础:数学优化之组合数的优化
文章目录一、求解问题二、求解思路1.莽夫思路2.数学化简一、求解问题计算Cnm=n!m!×(n−m)!C^m_n=\dfrac{n!}{m!\times (n-m)!}Cnm=m!×(n−m)!n!,其中m≤n二、求解思路1.莽夫思路我直接算,写一个阶乘的函数,写一个算组合数的函数long long factorial(int n) { long long m = 1; for...原创 2020-02-10 11:32:49 · 451 阅读 · 0 评论 -
图算法:最短路径算法总结
文章目录一、算法概念1.作用2.限制二、算法思想三、算法图示一、算法概念1.作用只获得了所有节点到初始点的最短路径长度,而非图中各节点之间的最短路径长度2.限制Dijkstra算法适用于边权为正的无向和有向图,不适用于有负边权的图!二、算法思想节点初始点中继点已求出最短路径的节点未求出最短路径的节点符号距离d:若相连,即为边权值若不相连,则设其为无穷大...原创 2019-11-07 12:21:51 · 644 阅读 · 0 评论 -
博弈论之Nim游戏
文章目录一、ICG1.Nim游戏属于ICG2.ICG的条件二、Nim游戏的定义三、过程实例1.一堆石子2.两堆石子四、分析1.规则2.dp(记忆化搜索)3.Bouton's Theorem(1)内容(2)证明(3)算法五、例题一、ICG1.Nim游戏属于ICGNim游戏是博弈论中最经典的模型(之一),它又有着十分简单的规则和无比优美的结论 。Nim游戏是组合游戏(Combinatorial...原创 2019-04-21 11:08:59 · 396 阅读 · 0 评论 -
DFS深度优先遍历理解
文章目录一、DFS1.DFS原理2.剪枝二、树的DFS1.部分和问题三、矩阵迷宫1.八联通一、DFS1.DFS原理DFS(Depth First Search)从某个状态开始,不断地转移状态直到无法转移,然后退回到前一步的状态,继续转移到其他状态,如此不断重复。树12345678910111→2→3→4→无法转移→返回4的上一节点3,不是直接回1→5→返回2→6→返回1→7...原创 2019-04-17 00:10:34 · 2004 阅读 · 1 评论 -
BFS宽度优先搜索
文章目录一、BFS二、矩阵BFS1.迷宫的最短路径一、BFSBFS(Breadth First Search),即宽度优先搜索。与深度优先搜索不同在于搜索的顺序,宽带优先搜索总是先搜索距离初始状态近的状态。也就是说,它是按照开始状态→只需1次转移就可以到达的所有状态→只需2次转移就可以到达的所有状态→……这样的顺序进行搜索。对于同一个状态,宽度优先搜索也只经过1次,因此复杂度为O(状态数*...原创 2019-04-17 00:14:31 · 489 阅读 · 0 评论 -
ACM六大错误分析
文章目录一、格式错误presentation error二、编译错误Compile Error三、运行错误Run Time Error四、答案错误Wrong Answer五、时间超限Time Limit Exceeded六、内存超限Memory Limit Exceeded一、格式错误presentation error意为输出格式错误,没有按照输出要求进行格式化。如you must no...原创 2019-07-24 11:59:05 · 599 阅读 · 0 评论 -
ACM之大数组问题
文章目录一、数组的size1.一、数组的size1.#include <iostream>#include<vector>using namespace std;int main() { vector<int> c; cout << c.max_size() << endl; //1073741823 return...原创 2019-07-29 22:03:09 · 1601 阅读 · 1 评论 -
ACM之动态数组问题
文章目录一、动态数组问题1.全局变量的数组2.new数组3.容器vector一、动态数组问题要求题目会输入一个n个元素的数组这样写报错#include<iostream>using namespace std;int main(){ int n; cin >> n; int a[n]; //这里报错,不能这样写 return 0;}...原创 2019-07-25 17:32:02 · 431 阅读 · 0 评论