
算法学习笔记
对算法的一点简单学习,有些简陋
ka1es
这个作者很懒,什么都没留下…
展开
-
2021-10-03
高精度算法学习总结由于做题的需要,需要算到21次方的和。很明显,整形已经不能满足需要。这时候就需要用到高精度算法。高精度理解很简单,主要就是将原本的很多位的数字以数组的形式存放(每一个数字都用一个数组)这样就可以对单独的每位数处理,而不用担心超过整形范围。处理方法:1.定义字符串,输入整数。2.定义数组分别存放其各个位3.计算高精度主要分加减乘除四类算法加法:从个位开始加,每次都存入新数组。最后再遍历一遍新数组,数字>10则向前进位(和乘法的处理很相似)乘法则是二重循环构建新数组,加法只是原创 2021-10-03 19:20:32 · 102 阅读 · 0 评论 -
2021-09-26
日常总结开学回来后的第一次总结,说一说自己这两天的收获。1. next_permutation();能按字典序返回不同组合。如a,b,c返回abc acb…函数主要用于寻找符合不同标准的序列。这样的函数,降低了函数的复杂程度(o(n))给定序列要求就可求出要求序列。2.递归函数的应用这些天java的学习也复习了递归函数。递归函数就是在函数里调用函数,这样极大的缩减了程序运行时间。可能就由on2到了on。重新做了求斐波那契函数,求n的阶乘。3.并查集写一个看的例子说说我的理解how many原创 2021-09-26 21:09:21 · 120 阅读 · 0 评论 -
2021-09-19
暑假总结算法竞赛这本书大概看了几十页。去掉前面几页,回顾了stl的几类结构。主要是写了写用法,做了几个例子(如圆桌问题)。再往后是递归排列问题,关于如何去构造一个递推式也是大概写了写,之后继续看了关于搜索的问题,有关深搜和广搜。最后也没能坚持下去,学了几天也就放松了。说说自己的总结,暑假确实是没做什么。到了最后几天,做了次cf的比赛。题目很简单,但是自己想半天也没理解,很长时间没做题,确实上学期学的东西也就落得差不多了。再说今天,和同学组队参加了比赛。实话说,题目很难,但也有两个几乎不用算法的题目,也原创 2021-09-19 21:02:45 · 83 阅读 · 0 评论 -
2021-05-23
ACM第十二周总结本周的学习主要是搜索复习递归,总结一下递归形式1.找到递归关系,前一状态与后一状态的关系,直到已知状态。2.设置边界,找到初末递归状态。(知道什么时候停止)3.设计递归函数。形式:f(n){if(n<=1)return 1;else n+f(n-1);}其次学习搜索,刚开始,感觉搜索就像是枚举(尤其深度优先搜索)从第一种情况开始再到子情况…再返回上一级for(i=1;i<n;i++)for(j=1;j<m;j++)for(k=1;k<z;k++原创 2021-05-23 15:20:35 · 85 阅读 · 0 评论 -
2021-05-16
ACM第十一周总结这一周主要学习二分查找,其次继续做了背包问题,接下来对一周做些总结。二分查找学习体会:我认为二分查找主要需要解决几个问题,排序,左右边界和对答案的判断。1.排序: 既然要二分查找 ,如果不以(大小)排序,则失去二分意义。2.边界问题 :左右边界要确定好,查找从左右(大小)开始,if(mid<x(待查找值))left(low)=mid+1;if(mid>x(待查找值))right(high)=mid-1;当然要确保left<=right3.判断:这就是原创 2021-05-16 22:53:02 · 110 阅读 · 0 评论 -
2021-05-09
ACM周总结学习感悟:这一周主要学习背包dp包括有01背包,完全背包,多重背包。01背包:f[i][v]=max(dp[i-1][v],dp[i-1][v-c[i]]+w[i])即i件物品放到体积为v的背包里状态转移公式表示第i件放与不放时的最优i:1-n v:V-0完全背包:n种物品,有无限件可用,装入容积为V的背包,求价值最大。原理和01背包差不多,我理解的是二维时,相当于01背包每一种的物品价值有(kw[i],2kw[i],3kw[i]…)所以在原基础上加入for(k=0;原创 2021-05-09 10:08:42 · 109 阅读 · 0 评论 -
2021-04-24
ACM第七周学习总结这一周正式进入区间dp的学习,有了前两周周的基础,对区间dp还是比较容易理解。区间dp在线性dp的基础上,以点变成区间。问题一般解决方法:三重循环:第一重 列举区间(从小到大)第二重 从初始到末尾(由左至右或者其他方式)第三重 动态转移 实现每一区间最优题目收获:这几天主要做了几个例题1.合并石子问题(1)一条直线上放有n堆石子,现将其两两合并,合并后的和即为合并花费。求合并到最后(只有一堆)的花费最大和最小是多少?问题分析:当只有一堆时,花费必然为0。当两堆原创 2021-04-24 19:14:36 · 82 阅读 · 0 评论 -
2021-04-17
ACM第六周学习总结这一周的学习较前一周有了改变,对于动态规划有了一定理解,做题也有了些思路。动态规划是求解每一阶段最优解,而每一阶段可能并不完全相同,但一定会存在本质相同之处,状态转移就是寻找相同,联系全体。但寻找状态转移方程并不能急于一时,上来就写很容易出错。要去了解每一阶段的不同之处,将所有可能考虑,综合写出状态转移方程。做题收获Functions again此题运用目的是求相邻两项绝对值分别取正负时,构成的两组序列中和最大的一组。题意比较简单,既然要求和的最大值,就要求各项,得到每一原创 2021-04-17 16:51:54 · 116 阅读 · 0 评论 -
2021-04-10
ACM第四五周总结第一周初识动态规划:动态规划即求每一阶段最优解以达到总体最优。起初以为是每一阶段求最优然后累加即可。但实际并不是,若只是每一阶段累加,则会忽略其他情况,从而缺少对最优解的讨论。所以动态求最优,还是实现了对所有可能的讨论,以求出最优。例如吃金币问题如果只是从第一步开始对每一步都求最大然后累加,最后的结果并不一定最大。如果用动态转移方程F[a][b]=max(F[a-1][b],F[a][b-1])+c则实现了对各种情况的讨论,以每一阶段最优达到全体最优刚刚学习时,遇到类似问题,几乎没原创 2021-04-10 19:12:03 · 96 阅读 · 0 评论 -
2021-03-27
ACM第三周学习总结一周所遇题型及解决办法区间问题:1.区间取两个数题意:在若干区间内(>=2)取出两个数,求不重复数的最少个数。思路:用结构体表示区间始末位置,以末位置升序排列。将第一个数组的最大两个数存入数组a,再用下一个区间初位置与上一个末位置比较看是否有区间重叠。若区间重叠则再用循环比较数组中已存入的数与区间内数查重,若重复两个以上,则可跳过,若不满两个则从区间最大数开始补足两个数 。若区间不重叠则直接取最大两数。代码实现:cin>>n;for(i=0; i<n; i原创 2021-03-27 07:00:00 · 205 阅读 · 0 评论 -
2021-03-20
ACM第二周学习总结贪心问题贪心问题即是寻找最优解。经过一周学习,解题思路主要是寻找规律,以小见大。问题分析与收获1.海岛问题和泥水池铺木板问题:海岛问题要求寻找雷达最少数量,即将海岛覆盖的雷达最少。此问题和木板问题相似即寻找覆盖水池的木板最少。解决海岛问题时先排序后运用圆的面积公式,将第一个海岛定在圆周上,再确定圆心位置以此类推。若第一个后面的海岛不在此圆内则重复第一步操作。然而忽略了海岛有横纵坐标,排序只考虑横坐标则不全面,所以可改变方法以每个海岛所在圆的圆心横坐标的大小来排序。木板问原创 2021-03-20 14:37:05 · 202 阅读 · 0 评论 -
2021-03-13
acm第一周学习总结万能头文件 <bits/stdc++.h>快速输入:std::ios::sync_with_stdio(false)(在主函数外可起到减少运行时间的作用——例贪心第一题 :#include#includeusing namespace std;int N;long long a[10000],s=0;int main(){})STL简单应用***string***头文件作用:多应用于对字符串的操作如特定语句的输入输出修改等其次也可通过对字符串的比较进原创 2021-03-13 17:08:44 · 79 阅读 · 0 评论