自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 2021年9月16日

逆推法求逆元:inv[1] = 1;for (int i = 2; i <= MAXN; i++) inv[i] = MOD-(MOD / i) * inv[MOD % i] % MOD;两个特殊构造:1.如何构造一个1~n的排列使得这个排列的n个前缀和在%n条件下互不相同,具体来讲,前缀和数组的构造方法为0,1,-1,2,-2·······,所以排列的构造为0,1,-2,3,-4······2.如何构造一个1~n的排列使得这个排列的n个前缀积在%n条件下互不相同,具体来讲,我们可以讲排列

2021-09-16 08:58:56 340

原创 天梯赛-L3

L3-001 凑零钱 (30 分)看上去是一个01背包 , 实际上就是个01背包。当然也可以搜索去做 , 只要剪枝剪的好就能AC 。对于这个题 , 物品的重量就是每一枚硬币的面值 , 价值同样也是每一枚硬币的面值 ,最大容量就是我们要凑的总面值。 显然 ,只要dp[m] == m , 那么我们就有可行方案 ,但是对于多个可行方案如何找到最小序列呢?我们首先想到在更新答案的时候标记一下 ,最后把标记点输出一下 。但是这样我们并不能保证序列最小 。我们想到把序列从大到小排序 , 这样能保证小的面值在更

2021-04-10 10:25:24 196

原创 区间动态规划专题

例1:P1880 [NOI1995] 石子合并这应该算是区间DP最典型的题了吧。首先说一下这道题的小技巧吧 , 因为这个题是一个环上的DP , 因此我们可以断环成链 , 从而可以降低问题的复杂度。具体操作就是复制一段一摸一样的序列放到该序列的后面。然后再说一下dp的事情 :1.对于区间间断点的枚举 :倘若我们枚举左端点 , 然后枚举右端点 , 然后再从左端点到右端点中枚举间断点 , 这样就会使得答案不能完全覆盖(意思就是有一些状态在更新时用到的之前的状态没有更新过), 这样就造成了错误解。其实我

2021-03-19 18:46:02 136 2

原创 背包动态规划专题

01背包:1.P1048 [NOIP2005 普及组] 采药(裸的01背包板子)Code:(这里用了滚动数组)在这里插入代码片#include <bits/stdc++.h>using namespace std ;int t , m ;int val[500] , w[500] ;int dp[2][10000] ; int main() { cin >> t >> m ; for(int i = 1 ; i <= m ; i ++

2021-03-08 16:25:54 282

原创 线性动态规划专题

例1:P1095 [NOIP2007 普及组] 守望者的逃离这道题不像是简单的线性DP , 直接用DP是无法求解的 , 因为它多了魔法这一重限制条件。我首先考虑的是把魔法当作一种状态放在第二维 , 但是这样导致问题根本无法处理 。看了题解后才知道 , 可以把魔法和正常走路这两个东西完全分离开来处理,简单地说就是两次DP, 一次对魔法 , 一次对正常走路 , 然后再把二者的结果合并起来 , 得出答案。Code:#include <bits/stdc++.h>using namesp

2021-02-28 17:18:20 147

原创 2021--0--4--F

题目描述:有 n 个人, m 件装备,每个人只能装备一件装备,每件装备只能分配给一个人。其中,第 i 件装备可以给 k 个人其中一个 , 价值为 val 。求总价值最大为多少。数据范围:1 <= n,m <= 1e5 , 1 <= k <= 2 , 1 <= val <= 1e9优化后的网络流,二分图都可以AC本题,但还有更简单的做法。首先考虑贪心:优先选择价值更高的物品贪心的正确性证明:假设我们遇到一个价值高并且可选的物品不选,那么可以拿这个物品的人之

2021-02-23 14:18:32 124

原创 KMP

KMP算法还未刷题(暂时不写)Sirm23333大佬的推理:https://blog.csdn.net/qq_37969433/article/details/82947411?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendF

2020-10-14 16:31:39 88

原创 线段树

维护区间和的只有加法操作线段树模板#include<iostream>#include<cstdio>#include<cmath>#define ll long long#define maxn 100001using namespace std;struct Tree{ int l,r; ll sum; int add;}t[maxn*...

2019-11-07 09:54:43 77

原创 最近公共祖先(LCA)

定义:在一棵树中,若节点z既是节点x的祖先,也是节点y的祖先,则称z是x,y的公共祖先。在x,y的所有公共祖先中,深度最大的一个称为x,y的最近公共祖先。那么,我们怎么求两个节点的LCA呢?这里介绍3种求法:1.向上标记法这种方法大概是大部分人首先想到的最朴素的做法 ,就是我们首先从x向上走到根节点,并标记所有经过的节点,然后我们从y向上走到根节点,当第一次遇到已标记的节点时,就找到了L...

2019-11-05 11:03:17 153

原创 树的直径

定义:树中最远的两个节点之间的距离被称为树的直径。(同时,连接这两点的路径被称为树的最长链)树的直径的求法:1.树形DP:声明:用d[x]表示从节点x出发走向以x为根的子树,能够到达的最远节点的距离。edge(x,yi)表示x与子节点yi的连边的长度。那么,d[x]=max{d[yi]+edge(x,yi)} ,其中,yi为x的子节点。简单来讲,就是从节点x出发走向以x为根的子树,能够到...

2019-11-03 11:05:40 286

原创 最小生成树

定理:任意一棵最小生成树一定包含无向图中权值最小的边。证明:假设无向图G=(V,E)存在一棵最小生成树不包含权值最小的边。设e=(x,y,z)是无向图中权值最小的边。把e添加到树中,e会和树上从x到y的路径一起构成一个环,并且环上其它边的权值都比z大。因此,用e代替环上的其它任意一条边,会形成一棵权值和更小的生成树,与假设矛盾。因此假设不成立,原命题成立。推论:给定一张无向图G=(V,E),n...

2019-11-02 19:41:11 294 1

原创 Floyd

Floyd算法:把每个点作为起点,求解n次单源最短路问题。该算法分为三个阶段:for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)第一维K是中间点,第二维i是起点,第三维j是终点。那么内部该怎么操作呢:for(int k=1;k<=n;k++) for(int i=1;i&lt...

2019-11-02 09:34:23 211

原创 双端队列

由于图中的所有边长度不是0就是1,并且当我们走边长为0的边时不会增大路径的长度,所以我们想到了优先去走边长为0的边。具体来说,我们优先用边长为0的边去更新其到达的节点的dist(最短路径),这样我们就保证了此时该节点的dist一定是最小的,你想想呀,我们之前一直用边长为0的点去更新,如果能更新到它,那么它就是由一个或多个尽量多边长为0的边与源点连接起来的,若更新不到,那么它最多经过这么多边长为0...

2019-11-02 08:09:37 190

原创 单源最短路径(Dijkstra&Bellman-Ford)

1.Dijkstra算法(基于贪心思想)步骤: First:初始化dist[1]=0,其余节点的dist值为正无穷大。(dist数组是源点到其他节点的最短距离,这里选定1为原点)Second:找出一个未被标记的且dist[node]最小的节点node,然后标记node。Third:扫描节点node的所有出边node->ver,边长为z,若dist[ver]>dist[node...

2019-11-01 09:57:52 267 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除