- 博客(92)
- 收藏
- 关注
原创 review(1)基础算法+基础数据结构+基础图论+简单dp
前缀和,快速求出一段区间的和。前缀和计算l-1,差分修改r+1。当遇到一个新元素,二分一下找出结尾小于该数的,,长度最长的序列,然后更新长度+1(和已经求出的长度+1的方案比较)当初看这个的时候感觉好难想啊,,现在看来思路是:找出结尾小于该数长度最长的方案 其实是很自然的。的最长上升子序列所有结尾中,结尾最小min的) 即长度为i的子序列末尾最小元素是什么。注意如果是r=mid-1,,则mid要l+r+1>>1。单调栈:求出第一个小于当前数、大于当前数的数。1.单链表,h,e,ne,idx;
2023-04-05 20:41:39 427 1
原创 fwdiary(10) 复习
如果先分解质因数,发现如果质因数的幂次是倍数关系,就可以合起来。如果合到只剩两个数,设幂次为a,b。那么答案容易想到应该是 正序n-k点前的最长下降子序列+k、逆序k点后的最长下降子序列+k、某点i的正序最长+k+(i+k)的逆序最长。状态转移中,是找到前面小于i号点值的点中,f(j)最大的。Ei=1(爬一次)+pi+1*E0(掉下去了)+(1-pi+1)Ei+1(没掉下去)状态表示f(r)存储的是最大的l,使得l到r内,存在两个满足条件的数。另外,如果有个质因数幂次为1,那么一定不可能,直接结束。
2023-04-02 21:40:14 298
原创 fwdiary(8) 区间dp,树形dp 记忆化搜索
首先遍历节点u的所有节点,枚举在该节点获得多少张票。此时我们应该知道,以子节点为根的子树中,选择k张票的最小代价,将这些看做物品(在子节点为根的子树中选择0到size(j)张票),那么实际上是个01背包问题。假设切割成A,B两部分,一种是把A作为单独切出来的一块,然后继续切割B。因此状态划分枚举在l,r内,如果wk==wr,则把k+1到r的消去,wk接上r之后的co个一起消去。那么再r之后,在l之前同时消去的方案可能记录不到,写不出状态转移方程。那就状态表示,在以u为根的子树中选择,得到。
2023-03-30 00:47:12 141
原创 fwdiary(7) 矩阵乘法,线段树
只需要去第k维状态,又是个矩阵乘法,显然可以用快速幂优化。那么接下来关注的就是第一维怎么求,又想到可能不用机会也可能是答案,因此还要求第0维。第0维就是floyd直接求最短路,第1维求法:枚举在哪条边上使用魔法。已知邻接矩阵n次幂 是经过n条边的最短路。同样运用动态规划思想,如果r小于l,证明是环形,所以l到n增值,再1到r增值。l到n最小值,再和1到r最小值,二者的最小值就是答案。k次机会可以是花费变成相反数,求最短路。接着就可以快速幂咯。
2023-03-29 00:45:37 105
原创 fwdiary(4) dp
就是每一个点,到子树的所有距离中,两个最长的加起来就是树的最长距离。(从一点找出最长距离点,再从该点再找最长距离点,始末两点连线就是树的最长距离)这里没有明确给出谁是谁的根节点,对于这种情况,建立无向图,dfs的时候默认一个点为根,father为-1,并在dfs的时候记录father。因此状态表示为,选择u的并且继续在u的子树中选择的集合。唯一要注意的点,S是非空的,所以必须如果点的权值都小于0,也要选一个。和没有上司的舞会一样,记录该点放不放士兵,根据情况状态转移。eee记录连通块点数最大和。
2023-03-24 10:20:39 74
原创 fwdiary(3) dp
如果选择,就是在i之前的最大连续子段和(大于0)加上a(i)。在遍历过程中用一个变量s不难记录。转移方法:集合划分为选择i与不选择i,如果不选择,以前i项最大为例,f(i)=f(i-1)一开始想的是,必须要以i结尾。那这样最后枚举答案的时候就是n方级别复杂度。则枚举答案时是n级别复杂度。并且也可以状态转移。记录状态转移方案,也就是树的根,然后dfs求解具体方案。注意k的遍历要遍历到l,r,因为可能没有左或者右子树。显然是记录1-i 和i+n的最大连续子段和。注意emm a的定义带来的性质。
2023-03-24 00:26:07 61
原创 fwdiary(2) dp2
走两条路,走一条最大的再走一条次最大的显然不是合起来最大的,那么只能考虑同时走,同时走就需要记录两条路线的坐标,那么有4维。求目标方案:base+v,base-v开始搜,如果搜到其中一个不为0,则证明找到答案,取此时base+v,base-v中d+p最大的状态。状态表示:分得0个,则等于所有人减1个饼干,直到最少的饼干数是1.所以方案数可以等价于i个人分得j-i个饼干的方案数。没有先修课,则父节点为0,因此0是根节点,最终答案要把0选上,所以实际上是m+1个结点。设i行为a,i-1行为b,i-2行为c。
2023-03-23 00:49:16 175
原创 fwdiary(1)dp
因此,我们考虑最后一个同学摆放在哪一排,因此状态表示为每排摆放了a b c d e个人的方案。暴力想法,经典状态表示 f(i)表示完成前i个请求的最小花费,通过指派一名服务员则可转移到下一个状态。菜狗没思路,于是考虑经典表示,完成前i个数的构造,(由于bi取值会对后面造成影响,且n最大只有2000,因此需要加一维),并且bi=j时,S的最小值。看了题解,思路没错,但是少一个引理:在满足S最小化的前提下,一定有一种构造方案,使得b中的数值在a中都出现过。,再者遍历b数组前面b比k小的数,
2023-03-21 00:55:35 131
原创 (2)bomblab
在发现phase4内还存在一个字符串比对过程,比对成功就能跳到能secret_phase的地址。secret_phase本意是个二叉树递归,但是老师好像该难度了,直接一开始让递归终止就解决了。5.观察程序,发现会根据我们输入的字符串的每个字符,先转变成一个整数,然后根据这个整数取出某个地方的值,然后6个值加起来等于给定值。思路:观察程序,实际上给定了第一个数,后面的数由前一个数在循环中按照某种关系递推得到。3.switch 按照输入的第一个数,函数会跳到某个位置,只有一个位置合法。
2023-03-19 21:24:47 56
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人