- 博客(37)
- 收藏
- 关注
原创 10.15总结
总思路就是设dp[i][j],i为节点编号,j为以n为起点的余3的边的数量,那么剩下的就是排列组合的问题了,这个转移方程也蛮巧妙的,刚开始算重复了,后来把子树上的三种边分开算就a了。还有一种常见的用法就是邻接矩阵的k次幂,(i,j)的数字就是其他点走k步到(i,j)点的方法数(边的长度要为1)那么怎么确定转移矩阵呢,就要通过待定系数来求得,在b站的牛客竞赛有个求转移矩阵的视频,看完就可以试试这个了。这段时间在写矩阵加速的题目,矩阵可以加速线性递推,比如f(n)=f(n-1)+f(n-2)可以转化为。
2024-10-10 22:42:09 251 1
原创 9.29总结
这是我觉得的一个有趣的题目,每个人身上都有n-1根绳子,如果组不成稳定三角,那么肯定有两个人相邻两根绳子颜色不一样,那么每两个这样的人就会贡献一个不稳定三角形,所以只要所有三角形减去每个人红绳乘黑绳的数量的和除二就是答案。这个也蛮有意思的,求出所有路径的长度和/所有路径的条数即是答案。这星期学了概率和组合数学。
2024-09-29 22:29:33 302
原创 9.12总结
遍历树:通常使用深度优先搜索(DFS)来遍历整棵树,并在遍历过程中计算每个节点的状态。遍历的顺序一般是先遍历子节点,再计算父节点的状态,这样可以保证在计算父节点状态时,其子节点的状态已经被计算出来。时间戳记录:为每个节点记录两个时间戳,dfn[u]表示节点u被访问的时间(即DFS序),low[u]表示节点u通过DFS树中的边能回溯到的最早的栈中节点的dfn值。强连通分量判定:在DFS过程中,如果某个节点u的dfn[u]等于low[u],则说明以u为根的子树中的所有节点构成了一个强连通分量。
2024-09-12 23:40:10 331
原创 9.10总结
总的来说思考dp应该着重判断当前的状态的来源,并且一定要考虑好最优子结构和无后效性的问题,s为n的子节点,那么递推方程就写出来了,今天还做了几道dp,都是线性dp。根据题目意思可以建出一颗树,先dfs递到叶节点,在归的时候有递推方程。
2024-09-10 23:03:51 273
原创 学期计划大二上
感觉自己的代码能力还是不够,明明思路已经很清晰了代码还是写的很慢,所以在赛场上一直没有当键盘手的勇气,这也导致了赛场上的失利,我觉得我的缺点是只想而没有去实现所以很多小问题都没有实现,我决定这学期不能眼高于手,踏踏实实把每一道题目ac,题量跟别人比还是差距很大,我要每周计划至少多少道题,而且知识面也不是很广,尽可能的拓宽知识面,数学也不能落下,好好做题夯实数学基础。我想项目和算法双开,而且对模型也蛮感兴趣的,学学看看自己能不能训一个,有机会再打打kaggle。等打完icpc再翻下数据再决定走哪个方向。
2024-09-10 10:59:12 239
原创 9.9总结
上题主要是选取一个贪心策略,如果尽力把序号小的菜肴放到前面,则操作起来很难,如果反过来想,将序号大的尽可能放后面,则通过拓扑排序建立反向图,再输出则为答案。重复步骤 2 和 3,直到找不到增广路径为止。这个是二分图最大匹配算法。
2024-09-05 23:27:56 209
原创 9.3总结
最小生成树对边进行排序,当边数等于点数-1时中止循环,判断边是否可行则通过并查集判断。最短路的算法都是通过对边的松弛在更新距离完成,迪杰斯特拉则是贪心的思想。拓扑排序通过每过每次出队检索入度为0的点入队从而产生排序。拓扑排序和最小生成树的题目难点主要在对题目的建模。里面有拓扑排序,最小生成树,迪杰斯特拉,spfa。这几天又做了几道图论。
2024-09-03 23:41:35 121
原创 7.9总结
这几天做了点动态规划的题目,第一次做还是有点手足无措,现在对最优子结构,无后效性,状态的理解深了不少,难点在于状态转移方程,要观察元素的来历而不是去向,想清楚这个状态是由哪几个状态递推而来,分别有什么差别,以及如何判断状态,想清楚之后就能将首个元素写入,再类似数学归纳法一样一步一步递推出正确答案。先用前缀和预处理,再遍历3的阶乘,映射关系要看准。
2024-07-09 21:45:55 171
原创 7.4总结
例如,如果数字 $$$x = 16$$$ 、 $$$y = 3$$$ 和 $$$k = 2$$$ ,那么经过一次运算后, $$$x$$$ 变成了 $$$17$$$ ,而经过另一次运算后, $$$x$$$ 变成了 $$$2$$$ ,因为加一后, $$$x = 18$$$ 可以被 $$$3$$$ 整除两次。鉴于初始值为 $$$x$$$ 、 $$$y$$$ 和 $$$k$$$ ,马克西姆想知道 $$$x$$$ 的最终值是多少。- 当数字 $$$x$$$ 能被 $$$y$$$ 整除时,再除以 $$$y$$$。
2024-07-04 22:32:56 280
原创 7.2总结
第一思路是子序列在原串中每个字母必然是连续的,可以子串的每个字母若存在于子序列中则是离散的,所以遍历子串每个字母,再在子序列中找到离散的子串元素并记录数量,取遍历后的最大的最大元素个数和,再将a和b相加再减去遍历后的最大的最大元素个数和即为答案。有 $$$n$$$ 人观看了这些 $$$2$$$ 部电影。你的任务是计算包含 $$$a$$$ 作为子串和 $$$b$$$ 作为子序列的字符串的最小可能长度。给你两个字符串 $$$a$$$ 和 $$$b$$$ ,这两个字符串都由小写拉丁字母组成。
2024-07-02 21:43:47 373
原创 2024年6月20日总结 文本文件压缩
我的文本文件压缩是由哈夫曼编码实现的,由于要构建哈夫曼树我手搓了一个小顶堆的数据结构来实现优先队列,定义了长度为256的二维字符数组储存字符对应的哈夫曼编码作为一个哈希表的作用,定义了一个long long数组记录频率,先遍历文件得到频率表再由频率表生成节点放入小顶堆中,放入完毕再一直往小顶堆取出两个节点结合为一个直到只剩一个节点时返回,那么该节点就是哈夫曼树的头节点,再通过一个类似序列化的方法写入dat文件储存哈夫曼树,再遍历哈夫曼树写入哈夫曼码写入txt文件。对字节的处理是先定义一个uint8_t类。
2024-06-20 22:19:15 254
原创 5.23总结
目前是后端还没写好,在传输卡片的问题卡住了,如果只在服务器放入文件夹的话mysql就只能自己输入,如果从客户端传入服务器再插入mysql就能绕过去这个问题,这应该是我的解决方法。还有一个就是交易的界面,预计是分出交易请求和拍卖问题。拍卖问题还是想不到怎么操作。目前已经实现了抢答,作业得分,签到得分,的加积分功能。打算卡片和背景的获取都是盲盒模式。
2024-05-23 23:11:01 213
原创 5.14总结
解决抢答问题的时候出了点问题,不知道应该怎么实现,后来新建了个socket包换了个端口专门做实时通讯,代码如下。这是服务器代码,下面是客户端代码。学习通项目完成的差不多了。
2024-05-15 12:53:23 230
原创 4.21总结
解决了Javafx的控制和跳转问题,知道了那些数据该怎么命名以及如何返回,以及该怎么设置写入框的字符串返回,尝试打包回服务器处理。这几天在尝试登录注册与客户端和服务器连接起来,想着服务器连接数据库,再由用户端给服务器发送请求来实现增删改查。
2024-04-21 22:38:11 201 1
原创 4.18总结
建立与数据库的连接。查询的时候先创建一个Statement对象用于执行SQL查询,再定义了一个SQL查询字符串选择id,name,url字段,再使用executeQuery方法查询获取ResultSet对象,再遍历对象提取值。先建立了线程池,服务器socket = serverSocket.accept();复习了mysql和java的连接,还尝试了线程池结合网络编程搭建服务器。自旋,每次响应客户端连接就动用一个线程监听。mysql代码来自菜鸟编程。加载并注册JDBC驱动再。
2024-04-16 22:33:11 205
原创 4.9总结
建立一个Xianchen01类继承runnable接口再重写run方法,建立两个Thread对象,再用调用start方法即可实现多线程。当任务数量超过线程池的当前线程数量时,线程池会自动扩容,创建新的线程来处理任务。重新看了一下多线程和mysql连接的问题。线程池主要用于高并发,线程增删频繁的场景。有几种方法但我目前只熟悉两种。1.创建runnable接口。
2024-04-10 09:19:15 229 1
原创 4.7总结
还有一题写出来就超时了,因为没有剔除已经遍历过的点,但是剔除又无法得出正确答案,该题是bfs+贪心(我的写法),每遍历一个点就比较自己的值和该点的药的值,药的值大就让ok改为药的值,遇到终点就return,遍历完就证明不能找到。该题忘记了it怎么遍历,所以使用了set,map,arrey三种,arrey用于存储c,map指向a,set验证是否存在c。该题建立了point类存储xy和点的序号,再遍历每两个节点就能找到最远的节点。
2024-04-07 23:11:07 170
原创 4.2总结
分类讨论 当b<a则if(n%2) cout<<(n-1)/2*(a+b);今天学了JavaFX Scene Builder 2.0的使用。对输入的数据进行排序,再遍历一下就能得出答案。后来换了个文件改了路径就可以了。
2024-04-02 22:54:29 220 1
原创 3.26总结
那么每家的金额只有两种可能,偷与不偷,当决定偷时前一家必须不偷,则dp[i]=max(do[i-1],dp[i-2]+nums[i]),则最后dp[n-1]为最大值。上面代码建立了animal,cat,dog,lihuacat类其中cat和dog是animal的子类,lihuacat是cat的子类。该题与上题类似,只要将相同的数字点数累加则为上题的一个家的单位,方法类似,不过本题多用了滑动数组。5,对于操作都是知道有这个操作,但不能不看文档打出来,熟练度不够。1,java可以初步构造泛型,但还是不熟练。
2024-03-26 23:04:38 273
原创 3.26总结
5,对于操作都是知道有这个操作,但不能不看文档打出来,熟练度不够。2,基本学会继承与多态,java不支持多继承。1,java可以初步构造泛型,但还是不熟练。3,正则表达式还是不是很熟练,经常出错。4,看了一点多线程,但还是不清楚具体。
2024-03-26 22:13:01 196
原创 3.21总结
2.算法方面试着使用双向bfs,对a*有了初步的认识,以及试着先写伪代码再写代码来减少改bug的时间,放慢了点速度以求准确性。1,学习了java的基本数据类型,java的数组操作,类与对象的创建,以及import的一些库的使用,会创建与使用类的方法。
2024-03-21 22:38:02 151 1
原创 3.19总结
学习了Java,对面向对象的思想有了初步的了解,继承,封装,多态。打了第一场cf,果然英语学习道路任重道远。这三天写了三道搜索题目又熟练了一点搜索。学了点线性代数和离散数学。
2024-03-19 22:31:16 108
原创 2.21总结
具体操作上,先找个主元,然后通过交换行和倍加行之类的操作,把下面的行都消成零。这个过程得小心点,主元不能选零,倍数也得算对,不然就变错了。今天学了高斯消元法,用来解线性方程组的。这个方法基本上就是通过一系列的行变换,把方程组的增广矩阵变成阶梯形矩阵,然后就可以求出解了。实践上,我编了个程序来实现高斯消元法。先构建方程组,转换成增广矩阵,然后按照步骤进行行变换。最后通过回代法求出解,验证了一下,没错。
2024-02-22 01:57:13 564 1
原创 1月20日学习总结
通过多做练习和总结经验,逐渐学会了根据问题的特点选择合适的预处理方法。掌握了并查集的基本概念,它是一种树形的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。学习了预处理的基本思想,即在进行实际计算之前,先对数据进行某种形式的处理,以便在后续的计算中能够更高效地得到结果。通过实际编程练习,加深了对并查集实现方法的理解,尤其是路径压缩和按秩合并的优化技巧。通过具体问题的分析,学习了如何选择合适的预处理策略来优化算法性能。
2024-02-21 00:23:05 359
原创 1.18总结
今天进行了测验,对于搜索的问题还是掌握不好,有很多小问题,大概是最近有点懈怠,学习了一下并查集,感觉并查集问题可以抽象为首尾相连的链表,又思考了递归和分治,有篇文章说递归的时候只要考虑中止条件和功能部分,不建议仔细思考,毕竟人脑能压几个栈。我想了一下,或许这就是人脑和电脑的区别,人脑可以很容易发现递推的关系从而降维打击。
2024-02-19 00:22:26 350 1
原创 1.31总结
我的思路是建立一个包含x,y,t的结构体,再把earth初始化为零,把陨石的到达时间与坐标写入earth,再进行bfs,但下面代码有误,无法求出答案,还没找到问题所在。先写了一个link函数求俩字符串重叠长度,find函数负责dfs寻找最长长度,u[]保存使用次数,lh保存最长长度,
2024-02-01 00:19:35 1810 1
原创 1.25总结
看了点《具体数学》学习完约瑟夫问题及其推论,以及解决了一些递归的问题,感觉递归问题像数列中的递推式,不断的递再归。今天学习了stl中的set,set包括insert,empty等操作。对哈希表有了更深刻的理解,对哈希冲突有了认识。通过双指针解决了接雨水问题。
2024-02-01 00:02:32 469 1
原创 1.30总结
这题也是用了回溯,该题主要难点为坐标的处理,定义了4个数组,其中z1,z2为对角线坐标,但下面代码仍有些问题,运行结果错误,希望大家给我指正。print函数负责输出,find函数第一个参数记录拆分数,第二个为第b个拆分。后面的a+=i使a回溯到该步。这道题主要是dfs,观察到要输出过程数,所以建立了一个an数组,初始化第一个元素为1,
2024-01-31 00:06:42 313
原创 1.24总结
动态规划,动态规划貌似是暴力搜索的优化,通过类似记忆化的方法可以剔除重复计算的问题,而且具有几个特性,重叠子问题,无后效性,最优子结构。通过求解动态转移方程来求解。贪心,则是通过一些评判标准作为依据寻找最小的局部最优解,递推从而达到全局的最优情况,这步往往由数学证明得出。回溯,主要是通过达到边界条件返回上一步,具体可以在深度优先搜索,计算组合数,迷宫,遍历树等问题运用。今天学习了回溯,贪心,动态规划的思想。
2024-01-30 23:37:09 448 1
原创 1.23总结
我认为树的实现逻辑与链表类似,不过树有一个值和两个索引对于left和right,遍历树可以通过bfs与dfs,且树的增删也具有链表的特点,对于stack,stl内置top,push,pop,size等函数,可以实现深度优先搜索,像往一个不大的桶放东西,只能先拿表面的。对于queue,必须满足先进先出的顺序,stl内置push,front,pop,size等函数,可以用来实现广度优先搜索。链表是一种离散的数据,每个元素包括值与指向下一元素的索引,较于数组增删操作较为方便,但遍历必须由首元素起。
2024-01-28 00:14:10 590
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人