自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 12月19日周末总结

选择排序选择排序是对序列进行遍历,每次遍历都找出无序部分中最小的(或最大)的数值,与第一个无序数值互换位置,不断重复此过程,知道序列有序。由此可知,选择排序的时间性能为n方级别(因为记录交换不是在相邻单元中进行,所以是不稳定排序)for(int i=1;i<=n;i++) { int index=i; for(int j=i+1;j<=n;j++) { if(a[j]<a[index])

2021-12-20 00:23:34 60

原创 12月12日周末总结

插入与搜索折半查找(二分查找)前提:使用该算法要求为有序数据。折半查找的基本思想:减少查找序列的长度,分而治之地进行关键字的查找。他的查找过程是:先确定待查找记录的所在的范围,然后逐渐缩小查找的范围,直至找到该记录为止(也可能查找失败)。以下代码为循环实现。也可以使用递归实现,要注意递归实现要小心内存的限制,循环则要小心时间的限制。int Search(int n,int key){ int low,high,mid; low = 0; //定义最低下标为记录首位

2021-12-12 22:35:44 248

原创 12月5日周末总结

AOE网与关键路径AOE网是一个带权的有向无环图。其中用顶点表示事件,弧表示活动,权值表示两个活动持续的时间。AOE网是以边表示活动的网。关键路径是指在AOE网中从源点到汇点路径最长的路径。这里的路径长度是指路径上各个活动持续时间之和。在AOE网中,有些活动是可以并行执行的,关键路径其实就是完成工程的最短时间所经过的路径。关键路径上的活动称为关键活动。时间发生时间事件vi的最早发生时间:从源点到顶点vivi的最长路径长度,称为事件vi的最早发生时间,记作ve(i)。求解ve(i)可以从源点ve(0)

2021-12-05 23:38:52 57

原创 11月28日一周总结

图论求最小生成树最小生成树带权图:边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权。最小生成树(MST):权值最小的生成树。 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路。可以把边上的权值解释为线路的造价。则最小生成树表示使其造价最小的生成树。普利姆算法又名Prim算法,prim算法实现图的最小生成树。假设有n个顶点,m条边,该算法适合稠密图因为其时间复杂度为O(n^2),与边的数目无关。算法思路:从某个顶点开始,假设v0,此时v0属于最小

2021-11-28 22:11:18 60

原创 11月21日一周总结

图论弗洛伊德算法:(一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法)Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题。(代码也是动态规划的思想)从任意节点i到任意节点j的最短路径不外乎2种可能,一是直接从i到j,二是从i经过若干个节点k到j。所以,假设Dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查Dis(i,k) + Dis(k,j) < Dis(i,j)是否成立,如

2021-11-21 23:15:35 2739

原创 11月14日一周总结

题目总结线段树问题+二分查找对一个数列进行以下操作:查询操作,查询当前数列中末尾L个数中的最大的数,并输出这个数的值。插入操作,将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。long long max(long long a,long long b){ return a>b?a:b;}const long long inf=-(1<<62);void add(int

2021-11-14 23:28:43 546

原创 11月7日一周总结

二叉树的进一步拓展线段树问题线段树是属于二叉树的一种,具有二叉树的所有性质的同时还具备了进行区间处理的能力线段树就如他的名字一样,是建立在线段上的一种二叉树,每个线段[L,R],L代表左子节点,R代表右子节点,L等于R说明只有一个点,L小于R的时候,[L,M]代表了左子树根节点,[M,R]代表了右子树根节点,而M等于(L+R)/2。对于m次的数据处理,这个数据结构的复杂度O(mlog2n),线段树的节点代码如下:#define MAXN 200struct tree{int l,r;int

2021-11-07 23:45:54 52

原创 10月31日一周总结

二叉树二叉树是一类较高级的存储结构,它的定义如下struct node{ int value; node *l,*r;};二叉树是树这一种存储结构中最具代表性的一类,树是非线性的数据结构,可以直观的表示出层次关系,对于如目录一类问题的实现作用显著。二叉树的基本操作遍历:遍历操作是最基本的二叉树操作,可以在这个的基础上进行插入和删除等其他操作,而在遍历中又分为了三种遍历方式,前序,中序和后序,二叉树的遍历操作都是建立在递归上的,而这三种遍历方式格式也大同小异。int post

2021-10-31 21:16:58 56

原创 10月24日周末总结

搜索优化康拓展开康拓展开是一种在全排列中数值与所处位置的对应关系的展示,可以在搜索算法中起到判重的作用,这样可以大大缩短运算量。举例说明一下:有12345这5个数,给出21543,根据康拓展开可以求出这是位于字典序中的第几大数,首先从第一个数开始,比它小的只有1,后面还有4!种,所以是14!种,再看下一位数,没有比1小的,这样只有03!,以此类,就可以得到比当前这个数的字典序。(注意:这里不仅要求是比当前位的数小,还要求被比较的数没有出现过,所以只需要让当前位的数与在他之后的每一位数作比较即可)lo

2021-10-24 23:35:53 41

原创 搜索题目(剪枝)

洛谷P 1120 小木棍题目大意:给出一堆一已知长度的木棍,它们是由一些木棍随意切割而来,之前的木棍长度一样,问之前木棍的最短长度。这道题目方向比较明显,就是遍历所有可能的数值,进行 dfs 搜索,但是这个问题中有很多可以优化的细节,比如遍历的数值,这个一般从0到木棍的长度之和,但是这里面有许多是达不到的,所以只用遍历所有的因数即可。在对木棍进行深度搜索时,同时要注意运算顺序,从长木棍到短木棍的运算速度要比乱序快,因为短的木棍更加灵活,这个是在洛谷的题解上看到的,虽然原理很简单,但是被我忽视了,短的木棍

2021-10-17 23:31:46 97

原创 10月10日总结博客

知识点总结打印子集关键点:利用二进制来表示集合内元素。(二进制与n=3时子集的对应关系)代码实现:for(int i=1;i<(1<<n);i++) { for(int j=0;j<n;j++) { if(i&(1<<j)) cout<<j<<" "; } cout<<endl; }

2021-10-10 23:02:44 38

原创 7月21日知识点总结

7月21日知识点总结这是暑假学习acm相关知识的第一篇博客,这次再次学习了一些基础算法,主要是高精度计算,高精度计算第一次接触是在新生赛,当时的数值很大,而且对字符串的应用也不熟练,只知道与数组有关,但这次已经学会使用字符串数组,所学习起来相对轻松。基本问题数据的的接收和储存,因为字符串可以输入位数很长的数字,然后再利用字符串函数,将每一位取出并存入数组。代码:string s; int a [max]; int len=s.length(); for(int i=1;i<=le

2021-07-22 01:02:13 59

原创 5月23日一周学习总结

5月23日一周学习总结二分问题这周做题以二分问题为主,个人认为二分法比较适用于单调性问题,因为如果不满足这个条件,则问题会出现多个解,二分法同时也是对于暴力遍历的优化,因为二分的运算量是log级别的,在对于大数值的问题方面速度运算量是远低于暴力遍历的。做题方面感觉二分的实现不难,但是切入点比较难找,例题:给出一条河,并给出n块石头距离河岸一头的距离,问搬去m块石头后,两块石头之间最短距离最大值为多少。这道题一开始思考的时候想不到二分在哪使用,因为题目求解的问题只需按照距离由小到大删去就可以满足,所以

2021-05-23 14:44:03 53

原创 5月16日一周学习总结

5月8日一周学习总结背包问题这周是依旧是背包问题的训练,包括01背包,完全背包,多重背包,还有一些背包问题的变形。这周较为清晰的理解了完全背包问题中的一维dp方程,与01背包循环顺序相反,这样就会按照体积由小到大改变背包价值,等到了计算统一循环大体积背包时就可以进行利用。for(int j=1;j<=n;j++) for(int k=w[j];k<=s;k++) dp[k]=max(dp[k],dp[k-w[j]]+v[j]);字面意思可以理解为:判断第n种

2021-05-16 16:11:34 49

原创 5月8日一周学习总结

5月8日一周学习总结背包问题这周开始练习背包问题,背包问题本质是dp问题的一个分支,但由于过于经典而被列了出来,其中背包问题还可以分为01背包,完全背包,多重背包等,背包问题的重点在于寻找动态转移方程,背包问题模板:给定一个体积为V的背包,再给出多个物品的体积和价值,求装满背包时最多能装多少价值的东西。其中01背包是规定每样物品只有一样,也即对于一种物品只有两种情况,要么装入背包。要么不装入,如果装入的话,则要寻找子问题,也就是装入这个物品之后,剩余的体积最多装多少物品。完全背包问题则是一个物品可以被挑

2021-05-09 01:21:39 68

原创 4月24日一周学习总结

4月24日一周学习总结区间dp问题这周继续学习了区间dp问题,还做了线性dp的问题,还认识了背包问题,对于区间dp问题,个人感觉思路较为统一,一般都为三层循环,第一层为区间长度,然后遍历所有区间,再嵌套一层循环,设置标志点,将一个区间分为两段,再在每个区间里取值,然后遍历所有可能。例题:石子问题(非常经典的区间问题,个人感觉题解可以作为区间dp的一般模板)共n堆的石子。现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆石子数记为该次合并的得分。求合在一起的最小得分和最大

2021-04-25 00:12:29 60

原创 简单DP:子序列问题

最大连续子序列给定K个整数的序列{ N1, N2, …, NK },其任意连续子序列可表示为{ Ni, Ni+1, …,Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和为20。在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该子序列的第一个和最后一个元素。Input测试输入包

2021-04-25 00:11:02 81

原创 4月17日一周学习总结

4月17日一周学习总结简单dp问题这周依然是简单dp问题,虽然称为简单dp,可出的题型却多种多样,但都是以寻找动态转移方程为主,个人认为因为动态规划是对全局的判断,所以当前情况一定与上一步存在某种联系,然后可以当前的情况列动态转移方程,用之前的情况来表示出当前可能的情况,然后遍历所有可能的情况。个人觉得比较经典的一道,虫子爬树:有一排树,一只虫子每分钟可以爬到邻近的树上,给出虫子最初的位置,问当虫子到特定的时间到特定的树有多少种情况。int dp[205][205]={0}; dp[0][10

2021-04-17 19:12:22 53

原创 4月10日一周学习总结

4月10日一周学习总结动态规划这周是开始学习动态规划的第二周,对动态规划已经有了一个初步的认识,但是在做题方面还是很难独自找到解决办法,以下为这周学习总结。寻找最长有序子序列问题这个问题时动态规划问题中的经典问题,但是可以有很多的变式:求最长子序列的和,求两个序列的共同子序列的最长子序列…其基本的解题思路比较统一,一般都是先找动态转移方程。以下是寻找最大和子序列问题,第一次做这道题的时候认为可以开一个数组来记录当前位置的最大和子序列,然后下一个位置时开始从前面查找找到当前最大子序列相加并继承。

2021-04-10 20:58:47 64

原创 胖硕鼠问题(动态规划)

HDU 1160胖硕鼠问题:在最长有序数列的基础上进行了一些改动,目的可以概括为按体重由重到轻排序后,看速度的最长增序列。#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>using namespace std;struct w{ int weight; int speed; int id;}a[1006];bool c

2021-04-04 00:54:49 167 1

原创 贪心算法题解:木棍切割问题

There is a pile of n wooden sticks. The length and weight of each stick are known in advance. The sticks are to be processed by a woodworking machine in one by one fashion. It needs some time, called setup time, for the machine to prepare processing a stic

2021-03-28 21:15:16 446

原创 3月27日一周学习总结

3月27日一周学习总结贪心算法本周做题仍以贪心算法的题目为主整数区间例题:读取一组闭区间,找到一个集合,每个区间至少有两个点包含于该集合,问这个集合的最小元素个数。这道大概的思路比较明确,先对区间进行排序,由小到大,然后设置两个标记点,根据贪心思想,设置为第一个区间的最后两个点是最优的选择,之后遍历所有区间,根据标记点与新区间的关系,可以划分为三种情况。第一种:两个标记点属于均新区间,这种情况下可以直接continue第二种:一个包含于新区间,一个不包含于新区间,这种情况需要对不属于新区间的标记点

2021-03-27 14:36:03 55

原创 3月20日一周学习总结

3月20日一周学习总结贪心算法(个人对贪心算法的理解:以不断求解局部最优解的方式得到最终的总体解)节目问题节目问题的代表题目:给定一组节目的开始和结束时间,求最多能看多少节目。此类问题一般都以结束时间进行排序,因为从局部来看,当前节目结束的越早,剩余的时间就越多,看更多节目的机会就越大,每次都选取最早结束的节目便可以保证所看的节目最多。bool cmp(jiemu a,jiemu b){ if(a.en<b.en) return 1; else if(a.en==

2021-03-20 14:49:21 49

原创 3月13日一周学习总结

3月13日一周学习总结STL简单应用(以下顺序以个人理解应用程度由高到低排序)sort格式 sort(首地址,尾地址,排序方式)排序方式默认为升序排序,可自己定义(若排序对象为string类型,则以字典序进行默认排序如降序排序方式:bool cmp(int a,int b) return a>b;同时也可以对结构体进行排序如先以x升序排序,若x相同后按y降序排列struct str{int x,int y;};bool cmp(str a,str b){if(a.x&lt

2021-03-13 15:10:19 82

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除