随笔分类 -  acwing

摘要:#include<bits/stdc++.h> using namespace std; const int N = 1005; int a[N][N]; int b[N][N]; int n,m,q; void insert(int x1,int y1,int x2,int y2,int c){/ 阅读全文
posted @ 2020-11-13 16:45 mohari 阅读(141) 评论(0) 推荐(0)
摘要:题解:题目大意是添加最少几个字符使得该串变为回文串,这里可以转化为最少删除几个字符成为回文串(删除字符和添加字符其实一样); 那么问题的答案就是总长度减去最长回文串(子序列)的长度。 求解最长回文子序列长度使用区间dp来求解。 状态表示f[l][r]表示r-l区间内最长回文子序列的长度。属性值是最大 阅读全文
posted @ 2020-11-11 16:29 mohari 阅读(112) 评论(0) 推荐(0)
摘要:题解:整数划分问题。将M划分为最多N个数的所有方案数。比较经典的题,dp的划分方式想不出,这里记录一下。 f[i][j]表示总和为i,划分为了j个数的方案。集合可以划分为两个部分 1.序列中存在数字0,那么f[i][j]=f[i][j-1](相当于可以减少一个划分数) 2.序列数不存在0,即都大于等 阅读全文
posted @ 2020-11-11 11:07 mohari 阅读(167) 评论(0) 推荐(0)
摘要:传送门 前置知识:算术基本定理:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积N=P1^a1*P2^a2*P3^a3......Pn^an,这里P1<P2<P3......<Pn均为质数,其中指数ai是正整数。 题解:由算术基本定理,我们可以将x拆成若干个质数相乘, 阅读全文
posted @ 2020-11-10 10:48 mohari 阅读(161) 评论(0) 推荐(0)
摘要:传送门 题意:求树上两点的最短距离。考查lca,预处理点到根的距离dist,则两点a、b之间的最短距离是dist[a]+dist[b]-2*dist[p];p是a、b最近公共祖先。 关于lcahttps://blog.csdn.net/my_sunshine26/article/details/72 阅读全文
posted @ 2020-11-09 13:22 mohari 阅读(172) 评论(0) 推荐(0)
摘要:题目来源https://www.acwing.com/problem/content/31/ 思路: 题目意思是让你通过给定的二叉树自定义生成一段字符串,再用这个字符串重新解析成二叉树。 序列化使用先序遍历,遇到空节点添加"null ",其他节点用to_string转为字符串即可。 反序列化从左往右 阅读全文
posted @ 2020-10-01 00:12 mohari 阅读(173) 评论(0) 推荐(0)
摘要:题目来源:https://www.acwing.com/problem/content/31/ 思路: 模拟,中序遍历时,本节点的下一个节点分为两种情形讨论 当本节点存在右子树,直接找右子树的最左节点,即是中序遍历的下一个节点。 当本节点不存在右子树,则向上寻找最近可作为左儿子的节点(包含该节点)的 阅读全文
posted @ 2020-09-30 23:59 mohari 阅读(122) 评论(0) 推荐(0)
摘要:题目来源https://www.acwing.com/problem/content/description/14/ 思路:最直接的想法就是用map记录一下或者用set每次插入一个数判断一下长度有没有变化就好了。 class Solution { public: int duplicateInArr 阅读全文
posted @ 2020-09-27 16:24 mohari 阅读(235) 评论(0) 推荐(0)
摘要:题目来源https://www.acwing.com/problem/content/16/ 思路:刚开始想对目标数在行、列分别进行二分,但感觉这样是有问题的。 由于行列都是递增序列,观察发现如果目标数比当前数小的话,则当前数的左边必定全部比目标数小。而如果大的话,当前数的下边 必定全部比目标数大, 阅读全文
posted @ 2020-09-27 14:12 mohari 阅读(128) 评论(0) 推荐(0)
摘要:题目来源https://www.acwing.com/problem/content/23/ 思路:这是很经典的题,根据前序遍历创建根节点,再通过递归创建左右子树,最后根节点指向左右子树。 具体做法是通过在中序遍历中找到根节点的位置k,分别得到中序遍历左右子树的区间,得到左右区间的长度l,r。 而前 阅读全文
posted @ 2020-09-27 13:55 mohari 阅读(87) 评论(0) 推荐(0)
摘要:传送门 1.01背包 #include<bits/stdc++.h> using namespace std; const int N=1005; int f[N]; int n,V,v,w; int main(){ cin>>n>>V; for(int i=0;i<n;i++){ cin>>v>> 阅读全文
posted @ 2020-09-25 14:49 mohari 阅读(90) 评论(0) 推荐(0)