![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基本运算
不 彳亍
这个作者很懒,什么都没留下…
展开
-
基本运算之递归
维基百科上的解释:递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。我们通常使用函数来解决原问题,同时这个函数也能够解决于原问题类型相同的子问题。我们求解同类型的子问题,如果子问题的解可以扩展到原问题的解,那么就能获得原问题的答案。如何求解子问题? 函数是求解特定类型的问题的步骤与方法,因此直接代入函数即可,这就是“函数的定义中使用函数自身。因为求解原问题与求解子问题的方法相同,因此又将子问题分解成了规模更小的问题……这样一直重复问题步骤,直到“问原创 2021-03-02 13:35:27 · 117 阅读 · 0 评论 -
基础运算之倍增
天才ACM倍增 + 归并思路。难度较大。原创 2021-02-28 15:42:45 · 79 阅读 · 0 评论 -
进制转换模板题 AcWing 124. 数的进制转换
https://www.acwing.com/problem/content/description/126/#include <iostream>#include <vector>#include <algorithm>using namespace std;int main() { int n; cin >> n; while (n --) { int num1, num2; str.原创 2021-02-20 11:23:34 · 101 阅读 · 0 评论 -
二分答案转换为判定的题型
二分答案转换为判定问题:这个方法是怎么想到的呢?我做的题不多,试着依照现有的做题量,来总结了下这些题目的思考过程。(实时更新)AcWing 102. 最佳牛围栏最优解问题。题目描述:给定正整数序列A,每个长度大于等于L的字段都有一个平均值,求最大平均值。如果暴力枚举的化,就是枚举每个方案。每个方案都有一个对应的平均值。现在方案作为定义域,将平均值作为值域。以“每个符合要求的字段”作为定义域,“字段对应的平均数”作为值域,按值域从小到大排序,可以画出一个图。题目要求的最大平均值就是值域最大值S。原创 2021-02-20 11:23:18 · 217 阅读 · 0 评论 -
ACWing 91. 最短Hamilton路径
动态规划讨价还价。让求从0到n-1的最短哈密顿路径。0到n-1范围太大,如果0到n-2多好,0到n-3多好……如何描述这些子题目:i、j描述的是0到j的哈密顿路径。i表示每个点都被拜访过。所以状态就是i、j注意到如果0到n-1有一条最短路径,那么0到n-2的路径一定也是最短的。所以dp[i][j] = min(dp[i][j], dp[i ^ 1 << j][k] + weight[k][j])#include <iostream>#include <cstri原创 2021-01-12 15:08:31 · 101 阅读 · 0 评论 -
AcWing 124. 数的进制转换 (进制转换题型的万能模板)
https://www.acwing.com/problem/content/126/#include <iostream>#include <vector>#include <algorithm>using namespace std;int main() { int n; cin >> n; while (n --) { int num1, num2; string s1, s2;.原创 2021-02-04 12:07:42 · 119 阅读 · 0 评论 -
分治好题 AcWing 119. 袭击
https://www.acwing.com/problem/content/121/最近点对问题。分治思想:将这些点按x值从小到大排序,排序后的下标范围是[l, r]。现在用一个递归函数,求出[l, mid]这些点中的最短距离s1,[mid + 1, r]的最短距离s2。现在有3种情况:最佳答案在[l, mid]中最佳答案在[mid + 1, r]中最佳答案中的两个点,一个在[l, mid]中,一个在[mid + 1, r]中前两种都好说,答案就是min(s1, s2)。麻烦的是.原创 2021-01-29 19:37:06 · 337 阅读 · 1 评论 -
排序的几种题型
离散化的应用(用排序建立映射)AcWing 103. 电影(应用)https://www.acwing.com/problem/content/105/给定N个数,1,2,100000,1000000,3……,N不大,但是数很大。此时可以先对这些数排序,放到一个数组里,这样就建立了这些数与0,1,2……N的映射。之后用1,2……N来代替这些数,可以建立更方便的映射。如果这些数中有重复,需要去重,当然可以顺便把数量记录下来。因为已经排好序,所以可以使用二分查找来搜索100000映射的整数是0,1,2原创 2021-01-28 16:53:03 · 308 阅读 · 0 评论 -
贪心题型
AcWing 110. 防晒https://www.acwing.com/problem/content/112/区间匹配问题:给定一些区间和一些点,每个区间能与一些点配对。求最大的配对数量。做法:按区间的 起点 从小到大排序,逆序遍历 每个区间i(也可以直接从大到小排序),在与区间i相匹配的每个点中,选择最大的点。STL快速做法:用map储存点,upper_bound查找第一个大于区间终点的key值迭代器it,然后it- -即为能与区间匹配的最大点题目出现的特征:第i头奶牛需要**m原创 2021-01-28 12:57:00 · 130 阅读 · 0 评论 -
基本运算之二分
二分的两种用法:求边界将最优解问题转换为判定问题三分:用来求函数极值https://www.acwing.com/problem/content/104/用到了二分的第二种用法,前缀和,和平均值的数学知识题目可以抽象为对给定数目个数为N的序列,在所有长度大于等于F的子序列中,求出最大平均值将最优解问题转换为二分的判定问题。 为什么可以转换?原因在于在所有可能的平均值(平均值按升序排列)中,任取x0,如果存在子序列的平均值大于x0,则答案肯定在x0的左侧;如果都小于x0,那么答案原创 2021-01-18 21:28:55 · 138 阅读 · 0 评论 -
基本运算之差分 ACWing 100. 增减序列 AcWing 101. 最高的牛
差分的前缀和就是原序列。换句话说,每个差分序列都有唯一对应的一个原序列。因此可以把差分序列看作原序列的另一个表现形式。差分常用于处理区间问题。对于[l, r]区间,让其每个数加上C,相当于对应的差分序列B[l] + C, B[r + 1] - C。https://www.acwing.com/problem/content/102/题目要求让所有数都相等,等价于要求B[2] ……B[n]等于0。对区间的操作相当于对差分序列的“单点操作”。题目又要求最小的操作次数,因此我们可以尽量优先操作B[2…原创 2021-01-17 21:04:52 · 180 阅读 · 0 评论 -
递推 AcWing 95. 费解的开关
思路:枚举第一行的所有情况枚举完第一行后,固定住第一行,此时第二行按哪个按钮是确定的。假设第一行某盏灯是0,那么需要按第二行对应的灯泡来改变第一行。同理,操作第三行和第四行遍历第五行看看是否都为1。如果都为1,则达到目标。#include <iostream>#include <cstring>using namespace std;char g[10][10];int dirX[5] = {0, 1, -1, 0, 0};int dirY[5] = {0,原创 2021-01-13 17:08:13 · 120 阅读 · 0 评论 -
位运算的应用1:使用int型数字表示状态 ACWing 92. 递归实现指数型枚举
从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。#include <iostream>#include <vector>using namespace std;void DFS(int n, int state, int num) { for (int i = 0; i < n; i ++) { if (state >> i & 1) { cout << i + 1原创 2021-01-13 09:16:47 · 71 阅读 · 0 评论