![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习路很长
文章平均质量分 55
追随远方的某R
世界在等待我所寻找的答案
展开
-
7.14二分,LCA,差分,思维构造
无原创 2022-07-14 22:35:37 · 186 阅读 · 0 评论 -
7.13学习记录
思维构造原创 2022-07-13 20:19:17 · 112 阅读 · 0 评论 -
关于我山东省ACM成为铜匠这件事
文章目录一、前言二、比赛总结与今后计划1.比赛前期的训练总结2.比赛的流程与总结3.今后的计划一、前言省赛结束后,我一直在抓紧时间赶着学课程设计,从开学到现在除了必须考试的《计算机组成原理》其他的课基本完全没动,今天的javaweb作业进展十分顺利,得以有时间总结省赛,为今后的区域赛做规划。二、比赛总结与今后计划1.比赛前期的训练总结从寒假开始全队进入真正意义上的训练阶段,大一乃至大二上学期的时候我们都基本将时间荒废了,可以这么说,那个时候的我们去打省赛,运气极佳能拿到铜尾,否则就是铁牌都得排在后原创 2022-05-25 19:11:17 · 215 阅读 · 7 评论 -
代码源每日一题#456. 选数
抽屉原理+前缀和原创 2022-03-01 11:00:21 · 228 阅读 · 0 评论 -
关于位运算的思维题
位运算细节原创 2022-02-07 11:03:14 · 572 阅读 · 0 评论 -
二分法——二分答案
你会写二分吗?原创 2022-02-05 20:14:45 · 1278 阅读 · 0 评论 -
【日记】学习记录 11.21
总结本周新学习内容1.图论的托兰定理,数列不完全归纳2.图轮的最短路径算法之Floyd和Dijkstra算法3.数论相关(结论性内容),三分法(模板)4.并查集应用本周刷题情况Codeforces 共4题洛谷:本周累计通过:黄题16个 绿题2个主刷算法:搜索+图论,动态规划未完成目标:黄题4个,Codeforces未参赛一场小结普及/提高-难度的搜索题做了不少,已经没有问题了,这次两个绿题一个搜索的,一个动态规划做题的时候尤其是深搜,让我长进比较多,主要在于回溯上怎么写,和回溯到底原创 2021-11-21 19:43:48 · 97 阅读 · 0 评论 -
托兰定理与三分法
先说个简单的 托兰定理 其实就是个公式罢了https://www.luogu.com.cn/problem/P6269题意:这道题的描述就是任意三个点不构成环的话这样一个图最多有多少边图兰定理做法在没有(r+1)点团(点团:构成环路的点集)的n个顶点的简单图中,T(n,r)的最多有多少边。找规律做法https://oeis.org/这个网站可以帮助你轻松完成找规律额外补充:在这个网站找这个数列的规律时你会发现这样一段话。https://www.luogu.com.cn/probl原创 2021-11-20 19:37:54 · 639 阅读 · 0 评论 -
【图论】最短路径Floyd和Dijkstra算法
今天两个算法加上一个洛谷的DP题给我心态搞崩了。废话没有,开始写吧Floyd算法(邻接矩阵实现)适用性:邻接矩阵大小200*200以内的图==优点:1.能处理权值是负数的情况2.代码简洁3.处理所有点之间的最短路径缺点:由于使用了邻接矩阵计算过程中的大量无法避免的无效运算导致时间复杂度是立方级。采用思想:动态规划(偏向 0-1背包一点)模拟思想:1.第一步,假设我们有一张含有n个点,m条边的图,每个边都有权值。2.第二步,初始化第i个点直接到第j个点的花费(有边则花费是边的权值,没有原创 2021-11-18 21:05:35 · 675 阅读 · 1 评论 -
11-14学习记录
以刷题为主,新内容进行了一些,捎带着复习学习内容:1.图的存储与遍历虽说是跟着数据结构课学的,那100行左右的存储和操作代码肯定不能在比赛时候用,但是用STL的东西实现也是完全可以做到了,学到这里了也就去洛谷做了几个题试试,发现基本都是用Vector来存储的,实际上是孩子链表这种存储思想。关于存储还有个邻接矩阵的方法,属实只是一种可行方法而已,在面对稀疏图的时候这玩意儿分分钟爆你内存哦。重点:遍历操作2.并查集这个东西很好用,体积小而且容易理解,写起来也非常轻松。典型的题有这个刷题:刷题情原创 2021-11-14 21:11:13 · 818 阅读 · 0 评论 -
C++的输入输出,我为什么越来越喜欢用scanf而不是cin
刚学c++的时候io流一般都是cin和cout为主,后来知道了scanf和printf这两个东西由于我觉得scanf输入属实比cin要复杂的多,所以我一直都不喜欢用但是见的多了才发现scanf除了不太方便外全是优点,下面列举几个scanf和printf的优点1.由此题得来scanf("%d/%d",&a,&b);能输入1/2这样的分数,因为==%d/%d==2.scanf的耗时比cin慢有人说ios::sync那个东西,,确实能加快,但是很有限,scanf还是比cin快很多很多原创 2021-11-14 11:21:55 · 1732 阅读 · 0 评论 -
Java图形系统(类的继承相关)
系统要求:本系统分为6个类主基类 shape一级子类 cycle rectangle二级子类 cube cylinder用户操作类 User测试主类(main方法) test要求实现功能:通过User类的对象可以实现但不限于如下功能0.显示系统菜单1.创建图形,图形包括圆形,矩形,立方体,圆柱2.对于各个图形均可求得面积与周长3.可以浏览目前所有已经存在的图形与其信息4.退出系统主基类shape类:package System2;public class shape {原创 2021-11-13 22:47:42 · 994 阅读 · 0 评论 -
11.7学习总结
这周开始包括以后的一段时间里不会再学习新的算法内容了姑且细数一下 现在学的算法有,贪心,DP,区间DP,数位DP,背包,分治,二进制拆分,数论,组合数学,递归,深搜,广搜,STL,博弈论,字符串,还有个并查集。但是做过的题实在太少了,虽然能说出算法是怎么个1 2 3但是很难做到用在题目上,感觉也很差。所以我觉得缓慢进行新算法(计算几何,数,图论),集中精力刷题并且写题目总结。这周刷题:codeforces刷了6个左右,大概都是div2的C D题和div3的D E F洛谷刷了23个,目前通过20个(原创 2021-11-07 15:29:33 · 88 阅读 · 0 评论 -
10月31日学习总结
本周主要学习方向:数学最后一节博弈论,字符串开始学习博弈论:书上介绍的主要是尼姆博弈,巴什博弈,威佐夫博弈作为补充介绍,种类虽然比较少,但是解决问题的方法和种类都比较多,其中主要学习了巴什博弈为例的 N-P位置与动态规划(这个的总结博客还没发,因为还没写完,主要就是当巴什博弈给出了特定取值时怎么用动态规划确定胜负),尼姆博弈的“图游戏”没有学,我觉得放在后面把图论学完之后再学会更好。除了这些新的东西,原本接触的公式书上也有提到。字符串:关于字符串的基本操作,字符串哈希(原本觉得哈希是很高级的东西,实际上原创 2021-10-31 19:24:01 · 1075 阅读 · 0 评论 -
10月24学习记录
这周进行到数学这一章讲一下现在的学习状态负面1.数学啃的非常慢,很多模型和公式需要理解而且还比较难,书上很多地方直接就是“请读者自行思考”,然后就要慢慢查资料去啃。2.先前知识的遗忘,数学这一章给出的知识多,杂,大多都是公式和模型可以具体情况具体分析,这也让我回去看了之前学的分治,动态规划,递归,好家伙,动态规划忘了好多,一个周一半的时间都用来回顾分治和动态规划了。正面1.虽然难啃,但是好歹啃下去了,可以慢慢消化,既然给出的是模型就要多做题来看看具体是怎么用的2.复习了之前的知识,尤其是基础D原创 2021-10-24 22:20:16 · 2465 阅读 · 0 评论 -
学习记录:10月17
本周已经结束了DP部分的学习,开始学数学。在学数学的过程中用到了很多之前的方法,比如快速幂中用到了分治,另一种方法用到了二进制拆分,这两种方法对应归并排序和多重背包问题使用的方法,然后还有很多地方用到了递归。所以这周的学习分为了主要的学习内容和复习内容主要学习内容: 欧几里得,拓展欧几里得,同余和逆元,(前面三个学习时主要和二元一次方程的解联系起来了),埃氏筛法。主要复习内容: 背包问题(重点放在其他类型背包转换为0-1背包动态数组形态上的方法),分治法,递归。欧几里得gcd(a,b){ret原创 2021-10-17 12:19:31 · 64 阅读 · 0 评论 -
学习总结 10.9
本周由于身体原因,学习进度较慢新的内容:算法:区间DP与平行四边形优化,记忆化搜索,树形DP(主要难点在明确数和建树之后DFS上,DP状态倒是并不难),并查集。并查集:区间DP与平行四边形优化:刷题获得的新知识1.原来滚动数组的写法不是只有一种,背包问题的几层循环当控制不同的意义时功能也不同,比如:我第一层控制物品,可以看一个背包的完全背包和0-1背包状态下能装的物品最大值。如果第一层控制的背包容量,那么就可以枚举多个背包的最大值,具体就是我做的赛斯石那个题。2.背包有的时候不是以背包来出原创 2021-10-10 09:25:14 · 59 阅读 · 0 评论 -
动态规划之递推和记忆化搜索
类似于递归的一种DP方法,称之为递推+记忆化搜索。避免由DP转化为递归之后的重复运算就是记忆化搜索。一道例题来理解给定一个等边三角形图案由n行m列构成,第n行元素有n个,从第一行走到最后一行,每次只能走左下右下两个节点,每个节点有自己的数值当走到这个节点时获得这个节点的数值,问走哪个路径能让我最后的数值最大。排列组合原理的话,路径数是:22222******2=pow(2,n)个,这遍历起来不得个千把个年头。现有n平方级算法如下#include <iostream>using na原创 2021-10-05 23:07:06 · 226 阅读 · 0 评论 -
完全背包与多重背包与混合背包
0-1背包是每个物品取一份,我们完全背包是每个物品可以取无限个,多重背包是每个物品可以取n个。先看完全背包按道理我们可以根据0-1背包推出完全背包的朴素思想为dp[i][j]=max(dp[i-1][j],dp[i-1][j-kobj[i].w]+kobj[i].v);这样就会牵扯到三重循环,显得格外复杂按照滚动数组的思想优化,那么我们发现0-1背包之所以从后往前覆盖的原因就是避免重复选取一个物品,那么我们正向覆盖的话就可以满足完全背包的条件。dp[j]=max(dp[j],dp[j-obj[i原创 2021-10-03 13:51:34 · 105 阅读 · 0 评论 -
学习总结-10.2
这个周的学习主要以动态规划内容为主,学习了背包(0-1背包,滚动数组,完全背包),递推与记忆化搜索,关于LIS的三种解法有了更充分的了解。 关于背包中的-背包问题,我觉得这个公式:dp[i][j]=max(dp[i-1][j],dp[i-1][j-obj[i].vol]+obj[i].value)非常重要,关于之后完全背包,多重背包的问题中公原创 2021-10-02 12:46:10 · 64 阅读 · 0 评论 -
DP 0-1背包
面对如此问题:给定容器和物品求其容器中装入物品的最大价值。我们通常想到的是贪心,但是贪心有局限,比如我们只能装入整块物体不能切割并且受到容器大小限制时贪心就会不适用。这时DP就可以解决,我们称此类问题是背包问题今天就从最为朴素的0-1背包开始。已知N个不可拆分的物品,价值为v,体积为w,一个背包容量为m。求背包中装入物品价值最大是多少。首先来看,不可拆分明确是背包问题,对于背包问题中要放入背包的没一个物品都有“选”,“不选”两种选择。不选的情况:1.极端情况,体积过大放入超出背包容积2.普原创 2021-10-01 11:40:07 · 68 阅读 · 0 评论 -
动态规划密码脱落问题
题目地址解题思路:答案=字符串长度-字符串与反字符串的LCS的长度;考点:经典DP的LCS让我们来看看LCS是怎么找的给定两个字符串X,Y1.如果Xi==Yi那么无论对于Xi这个位置还是Yi这个位置的LCS都是Xi-1位置的LCS+1或者说是Yi-1位置的LCS+12.如果Xi !=Yi那么Xi位置的LCS就是Xi-1和Yi的CS和Yi-1和Xi的CS中最长的哪一个也就有这样的等式if(Xi == YJ)dp[i][j]=dp[i-1][j-1]+1elsedp[i][j]=max(原创 2021-09-26 11:17:55 · 107 阅读 · 0 评论 -
学习记录-9.26
上回解决完硬币问题的最小硬币数方案的输出后留下的拓展问题:总方案数经过两次DP的递推关系推导这一次应该能推的更加轻松一些首先看看只有1参与的时候各数值的组成方案总数金额 0 1 2 3 4…方案 1 1 1 1 1…有5参与金额0 1 2 3 4 5 6 7 8方案1 1 1 1 1 2 2 2 2有如下规律dp[0]=1dp[i]=dp[i-硬币金额]+dp[i]#include <bits/stdc++.h>using namespace std;int type[原创 2021-09-26 00:45:28 · 110 阅读 · 0 评论 -
关于递归的一点想法
之前写过一个斐波那契数列的递归,上午又看到了一个小孩吃糖,糖的总数一定,每天可以吃1-2个,问把糖吃完有几种方案。关于这两个题,先看看代码斐波那契#include <iostream>using namespace std;int key(int n){ if(n==1||n==2) { if(n==1) return 0; else return 1; } r原创 2021-08-01 21:19:28 · 71 阅读 · 0 评论 -
洛谷 单词接龙
Goto洛谷#include <iostream>#include <bits/stdc++.h>using namespace std;string s[30];char a;int vis[30],d[30][30],ans=-1,n;int con(int l,int r)/*左右拼接的*/{ int cnt=0; for(int i=s[l].size()-1;i>=0;i--) { for(int j=i;j&原创 2021-09-20 13:14:33 · 174 阅读 · 0 评论 -
暑假以来学习报告
自暑假7月17日开始,我正式开始学习算法的时间为20号,由于假期期间学校驾照的缘故,对算法的学习多少有了耽误。学习任务繁重,为节省时间我尽量简要说明。主要学习的内容:搜索(包含递归和BFS,DFS,迭代加深S),STL(关于黑书上的所有STL介绍),基本算法(贪心,分治减治(以并归排序为典型),模拟退火),动态规划(之前学的不是很牢固,大概现在进行到了背包,正在看背包九讲),零碎学习(部分图论,和思维题)。重点学习的内容:递归,STL,搜索。因为看到递归在后面不止搜索的很多地方(包括动态规划也有用到原创 2021-09-18 19:01:58 · 113 阅读 · 0 评论 -
基础的DP
动态规划问题,以问题中各个子问题的解可以递推(既解互有递推关系)得来为特点,代码简介且高效。重点为找出递推关系。通过下题展开讲解。问题描述:现在拥有极多种类的硬币(下列代码中假设了1 5 10 25 50五种,实际可以修改为更多种类)无限个,给定一个金额,要求输出:1.达到此金额的最小硬币数 2.最小硬币数的组成方案。分析:第一个问题给定了硬币种类(面值),要求推导任意金额的最小组成硬币数。我们可以试着去列一下子问题的解单单看面值为1的硬币时金额:0 1 2 3 4 5 6 7 8 9 10原创 2021-08-31 16:08:40 · 82 阅读 · 0 评论 -
POJ3126
很长时间没写了,,因为去考驾照了,现在考完了。POJ3126是一个BFS的题,DFS实在想不出来是个什么递归。题意:给出两个素数a and b,问a经历几次变化变为b。注:每次变化只能变化任意位置的一个数字,每次变化后得到的新数必须为素数。思路:4个位置每个位置的数都有十种变化可能性,101010*10-4就是所有可能了。我们把每一次得到的数进行检验就可以了。代码:#include <iostream>#include <queue>#include <cm原创 2021-08-27 14:33:19 · 389 阅读 · 0 评论 -
暑假学习——并归排序
并归排序是属于快速排序法的一种,基本思想分为三步如下。第一步:根据递归算法不断进行拆分,每一次都把每个子序列拆分为两个长度相等的子序列(有时候会多出一个元素来就像图中第二行)如图(这一步是到图片中第四行)第二步:当拆分到不能拆分时,进行排序,而我们通常递归到最后每个序列的元素只有一个所以并不需要排序。第三步:每一次都将原本拆分过的两部分合并在一起,这个过程是并归排序的主要步骤,当我们合并两个有序序列的时候会进行比较如下图这个图的意思就是b将会是一个temp空间,我们比较完成后会把较小的元素放在原创 2021-08-11 16:41:30 · 92 阅读 · 0 评论 -
模拟退火啊
思想上是靠一定的概率去碰每个点,我们碰到的所有点中有一个就是我们最终的答案,有比较大的错误概率,但是用起来的确比较简单。HDU2899#include <iostream>#include <bits/stdc++.h>using namespace std;const double eps=1e-8;double y,ans,f[2]={1,-1};double fun(double x){ return 6*pow(x,7.0)+8*pow(x,6.0原创 2021-08-10 17:42:23 · 75 阅读 · 0 评论 -
DFS练习
POJ1321棋盘问题(n皇后问题变形)由于题目设定n<=8所以完全在DFS解决能力内题目分析:按要求摆放棋子:即任意两棋子不同行也不同列,另外只有n*n范围内标记为“#”的位置可以安放棋子,"."不可以安放棋子。思路:DFS一行一行进行搜索,check每一行各个位置是否符合1.是#2.所在列未曾安放过棋子如果符合继续向下,不符合则于此处枝剪。#include <iostream>#include <string>#include <algorit原创 2021-08-09 14:27:14 · 105 阅读 · 0 评论 -
秋天的第一篇博客(枝剪)
HDU2553皇后问题本题此次采用搜索思想,因为题目中要求N<=10所以BFS和DFS姑且还在时间复杂度允许范围内。算是个DFS练习吧。题目分析:从第一行开始安放皇后,产生node1,此后第二场再按要求安放,产生node2,以此类推会出现符合题意的若干答案。根据题目要求,皇后之间不能同行同列同斜线,所以假设新皇后的坐标位置为(x,y)原本皇后坐标为(i,j)有如下关系。1.因为不同行不同列,所以对应x=i和y=j是不行的。2.因为不同斜线,所以abs(i-x)=abs(j-y)也是不行的原创 2021-08-07 17:16:26 · 83 阅读 · 0 评论 -
暑假学习 DFS
研究了一天的最短路径问题之后,,我发现最短路径问题解决方法比较多,BFS,DFS,A*,和其他很多的算法都能解决最短路径问题,所以我打算先搞定DFS,下一次再总结最短路径问题。 DFS和BFS一样都是搜索算法的一种,BFS以扩散+队列的形式来进行实现,而DFS则不同,毕竟是深度优先。DFS会用到递归来对一条路进行深度探索,当一条路探索到底后返回上一级节点,再探索进行探索,这就让我们想到了栈的性质,所以有BFS是扩散+队列,DFS就是递归+栈。在用BFS的时候我们会发现代码实现比较复杂,而DFS运用原创 2021-08-06 16:09:46 · 86 阅读 · 0 评论 -
BFS练习,八数码问题
按照书上的说,BFS之前那种属于是统计数目,而这次的八数码问题则是寻找状态,寻找一种我们需要的状态,在这个状态找到了之后我们就会结束整个搜索过程。八数码问题在分析的过程中也会有树状图形解释。那么根据之前所做的队列我们写一下#include <iostream>#include <bits/stdc++.h>using namespace std;int board1[3][3],board2[3][3],num,x,y;bool flag[3][3]={true};原创 2021-08-03 15:59:08 · 224 阅读 · 0 评论 -
暑假学习——队列与BFS
BFS和队列,这两种东西的实现方式非常像,以hdu1312为例此题中我们需要从起点开始,不断向外围扩散,扩散的过程中所有第一次遇到的黑砖都是我们需要记录的对象。那么就有如下三种解释第一种图形解释第二种,树状图形解释第三种,根据树状图形来的文字解释起点1入队 {1}第一步:1出队,2,3入队 {2,3}第二步:2,3出队4 5 6和7 8分别入对{4,5,6,7,8}第三步:4出 9入 5出10入 6出11入 8出 7出13 12入{9,10,11,13,12}第四步:1原创 2021-08-01 12:26:44 · 129 阅读 · 0 评论 -
递归练习3
求n的k次幂#include <iostream>using namespace std;bool flag=true;int sum;int key(int n,int k){ if(flag) { sum=n; flag=false; } if(k>1) { sum*=n; } else return sum; return原创 2021-07-29 11:03:10 · 139 阅读 · 0 评论 -
暑假学习 递归2
累加类型1.第一个人10岁,第二个人比第一个人大两岁,以此类推,问第m个人的年龄递归方法:#include <iostream>using namespace std;int num=0,con=0; int key(int n,int f) { if(n==con) { return num; } else { con++; num=f+2; key(n,原创 2021-07-27 12:48:55 · 143 阅读 · 0 评论 -
暑假学习 递归
特点:自我反复调用优点:写出来比较简洁,节省时间通过全排列来体会一下普通来讲全排列可以通过多重的循环来搞定,比如3个数的全排列写个三重循环然后避免重复就可以。但是如果是10个数呢,编程序难道要像码农一样编一大堆吗?这个问题可以用STL中的next_permuation()来解决,但是还有很多问题没有现成的模板,这时候为了让代码简介高效就要用到递归。#include <bits/stdc++.h>using namespace std;#define Swap(a,b){int原创 2021-07-27 07:25:30 · 106 阅读 · 0 评论 -
暑假学习 其一 STL和基本数据结构
这章部分内容之前学过了就不重复去记了。VECTOR(动态数组)用法初始化方面:类型1:vector<data_type> name(size)类型2:vector<data_type> name(size,value)类型3:vector<data_type> name类型4:vector<data_type> name(name2)/定义/类型5:vector<data_type> name(name2.begin(),name原创 2021-07-23 18:51:11 · 126 阅读 · 0 评论 -
《C + + 重载运算符的那点事》
一.重载运算符的简单介绍顾名思义,是将运算符的运算规则重新进行规定。 本质上是一个会自动进行调用的函数!文章接下来会按照以下几点来讲:1.重载运算符在代码形式上分为:类内重载 与 类外重载;2.针对被重载运算符的类型来讲主要分为:单目,双目运算符的重载;3.关于这部分知识点需要特别注意的有:1.++对象,对象++ 既前置与后置的区分 2.输入与输出的重载;二.重载运算符的使用1.按照代码形式类内:class test{ 返回类型 operator 被重载的运算符 (形参类型 形参名原创 2021-05-24 12:46:52 · 526 阅读 · 1 评论