自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 洛谷 P2014 [CTSC1997] 选课

题目描述在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习。现在有 NN 门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程 a 是课程 b 的先修课即只有学完了课程 a,才能学习课程 b)。一个学生要从这些课程里选择 MM 门课程学习,问他能获得的最大学分是多少?输入格式第一行有两个整数 NN , MM 用空格隔开。( 1 \leq N \leq 3001≤N≤300 , 1 \leq M \l

2022-01-30 10:25:38 758

原创 洛谷 P1352 没有上司的舞会

题目描述某大学有 nn 个职员,编号为 1\ldots n1…n。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数 r_iri​,但是呢,如果某个职员的直接上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数。输入格式输入的第一行是一个整数 nn。第 22 到第 (n + 1)(n+1) 行,每行一个整数,第

2022-01-22 19:16:38 159

原创 洛谷 P1228 地毯填补问题

递归分治每个22的块可以拼成44的块,以此类推#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define left_up fill(x,y,x+s-1,y+s-1,s)#define right_up fill(x,y+s,x+s,y+s-1,s)#define left_down fill(x+s,y,x+s-1,y+s,s)#define right_down fill(x+s,y+s,x+

2022-01-19 10:43:18 536

原创 洛谷 P1194 买礼物 题解

以为动态规划,原来是最小生成树kruskal#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3fint a,b,cnt,res,f[100100];struct node{ int v,u,w; friend bool operator <(const node&x,const node&y){ return x.w<y.w; }}edge

2022-01-17 10:06:33 625

原创 洛谷 P1140 相似基因

题目背景大家都知道,基因可以看作一个碱基对序列。它包含了44种核苷酸,简记作A,C,G,TA,C,G,T。生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物。在一个人类基因工作组的任务中,生物学家研究的是:两个基因的相似程度。因为这个研究对疾病的治疗有着非同寻常的作用。题目描述两个基因的相似度的计算方法如下:对于两个已知基因,例如AGTGATGAGTGATG和GTTAGGTTAG,将它们的碱基互相对应。当然,中间可以加入一些空碱基-,例如:这样,两个基因之间的相似度就可以用碱基之间相

2022-01-16 16:40:03 78

原创 洛谷 P1113 杂务

题目描述John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它。比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作。尽早将所有杂务完成是必要的,因为这样才有更多时间挤出更多的牛奶。当然,有些杂务必须在另一些杂务完成的情况下才能进行。比如:只有将奶牛赶进牛棚才能开始为它清洗乳房,还有在未给奶牛清洗乳房之前不能挤奶。我们把这些工作称为完成本项工作的准备工作。至少有一项杂务不要求有准备工作,这个可以最早着手完成的工作,标记为杂务11。John有需要完成的nn个杂

2022-01-16 10:43:13 63

原创 洛谷 P1122 最大子树和

题目描述小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题。一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题。于是当日课后,小明就向老师提出了这个问题:一株奇怪的花卉,上面共连有NN朵花,共有N-1N−1条枝干将花儿连在一起,并且未修剪时每朵花都不是孤立的。每朵花都有一个“美丽指数”,该数越大说明这朵花越漂亮,也有“美丽指数”为负数的,说明这朵花看着都让人恶心。所谓“修剪”,意为:去掉其中的一条枝条,这样一株花就成了两株,扔掉其中一株

2022-01-15 21:52:35 62

原创 P1077 [NOIP2012 普及组] 摆花

dp[i][j]表示前i种花摆j盆的个数。状态转移方程为 dp[i][j]=dp[i][j]+dp[i-1][j-k]0<=k<=min(a[i],j)#include<bits/stdc++.h>using namespace std;#define inf 0x3f3f3f3f#define int long longint n,m,dp[500][500],a[500],mod=1e6+7;signed main(){ ios::sync_with_.

2022-01-15 16:13:27 166

原创 网络最大流

洛谷 P3376 【模板】网络最大流Ford-Fulkerson算法关于反向建边,看下面这组数据6 7 1 61 2 12 4 14 6 11 3 13 4 12 5 15 6 1对应的图为由此看出,无反向的边的话,只有1->2->4->6这条路。反向更新后第二次寻找增广路为1->3->4->2->5->6。相当于将第一次找的增广路为1->2->5->6#include<bits/stdc++.h>

2022-01-15 10:55:23 173

原创 P1040 [NOIP2003 提高组] 加分二叉树

题目描述设一个 nn 个节点的二叉树 \text{tree}tree 的中序遍历为(1,2,3,\ldots,n)(1,2,3,…,n),其中数字 1,2,3,\ldots,n1,2,3,…,n 为节点编号。每个节点都有一个分数(均为正整数),记第 ii 个节点的分数为 d_idi​,\text{tree}tree 及它的每个子树都有一个加分,任一棵子树 \text{subtree}subtree(也包含 \text{tree}tree 本身)的加分计算方法如下:\text{subtree}sub

2021-12-20 08:49:12 217

原创 搜索——洛谷 P1406 方格填数

最初一股脑暴力,发现超时,于是开始优化。最后的S其实就是所有数的和除以n。没必要都填完再判断,填一行判断一行;填到最后一行时,填一列判断一列;填到最后一个数时判断对角线是否符合即可。#include<bits/stdc++.h>using namespace std;#define ll long longint a[20],vis[20],mp[5][5],f,n;ll aver;bool ok(int x,int y){ ll sum=0; if(y==n){

2021-12-15 22:11:06 947

原创 树形DP——洛谷P2015 二叉苹果树

P2015 二叉苹果树树形DP入门题f[i][j]代表以i为根的书上保留j个结点的最大权值和apple[i]表示到根节点i的树枝的苹果数量核心状态转移方程:f[i][j]=max(f[i][j],dp(l[i],k)+dp(r[i],j-1-k)+apple[i]);细节:由于树枝上的苹果数量可能为0,故mp数组初始化为-1#include<bits/stdc++.h>using namespace std;int n,q,mp[105][105],r[105],l[105],

2021-12-15 11:56:30 496

原创 P1198 [JSOI2008]最大数

虽然这道洛谷题不算难,我拿来练练线段树,但是一直过不了,后来才发现代码中有一处不懂的错误,根本原因还是对线段树理解不到位。记录下来#include<iostream>using namespace std;#define int long longconst int inf=-4611686018427387904;//-(1<<62)int n,mod,t,cnt=1;struct node{ int l,r,val;}tree[800010];void

2021-12-14 22:30:08 60

原创 自然语言处理--哈工大LTP的基本使用方法

导入from pyltp import SentenceSplitter,Segmentor, Postagger, Parser,NamedEntityRecognizer, SementicRoleLabellerSentenceSplitter——————————分句Segmentor ————————————分词(cws.model)Postagger—————————————词性标注(pos.model)Parser——————————————依存句法分析(parser.model)

2021-11-22 00:34:24 2860 1

原创 倍增算法。

本质是动态规划dp[i][j]代表从i开始,长度为pow(2,j)区间的最大值核心状态转移方程:dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);查询的时候判断l和r是否相等,否则log2(r-l)会RE,因为这个错误找了半天P3865 【模板】ST 表#include<bits/stdc++.h>using namespace std;int n,m,dp[1000010][20],l,r;inline int read(

2021-11-15 00:58:37 888

原创 欧拉回路 Hierholzer 算法

P7771 【模板】欧拉路径题目描述求有向图字典序最小的欧拉路径。输入格式第一行两个整数 n,mn,m 表示有向图的点数和边数。接下来 mm 行每行两个整数 u,vu,v 表示存在一条 u\to vu→v 的有向边。输出格式如果不存在欧拉路径,输出一行 No。否则输出一行 m+1m+1 个数字,表示字典序最小的欧拉路径。算法内容:先判断是否符合构成欧拉回路的条件,若符合,则开始搜索从出度比入度大1的点开始,若遍历到某个点没有边了,则该点一定是终点。因为欧拉图中入度比出度大1的点一定是终

2021-11-10 00:48:19 311

原创 差分约束算法

新建一个 0 号点,从 0 号点向其他所有点连一条权值为 0 的边。若有负环则无解P5960 【模板】差分约束算法#include<bits/stdc++.h>using namespace std;#define ll long longint n,m,tot,u,v,w,head[200005],dis[200005],cnt[200005];struct node{ int to,w,next;}edge[200005];void add_edge(int fro

2021-11-07 10:29:29 48

原创 P3385 【模板】负环

如果一个图中有负环,用SPFA算法将会陷入死循环,因为到每一点的最小值都会一直减少,所以会一直更新,结点便会一直入队。因此判断入队次数是否大于n即可判断是否有负环#include<bits/stdc++.h>using namespace std;#define ll long longint t,n,m,u,v,w,cnt,head[100005],dis[100005],tot[100005];struct node{ int to,w,next;}edge[10000

2021-11-05 01:23:22 87

原创 最短路径--SPFA算法

开始学差分约束系统,传统的dijkstra算法不再管用,因此需要SPFASPFA是广度优先遍历,每个点都会更新dijkstra每次从最近的点出发更新,有负边则是不正确的SPFA算法得出1到2最短距离为2dijkstra算法得出1到2最短距离为3P3371 【模板】单源最短路径(弱化版)题目背景本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779。题目描述如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。输入格式第一行包含三个整数

2021-11-02 00:07:41 122

原创 最小生成树--prim算法与kruskal算法

P3366 【模板】最小生成树题目描述如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz。输入格式第一行包含两个整数 N,MN,M,表示该图共有 NN 个结点和 MM 条无向边。接下来 MM 行每行包含三个整数 X_i,Y_i,Z_iXi​,Yi​,Zi​,表示有一条长度为 Z_iZi​的无向边连接结点 X_i,Y_iXi​,Yi​。输出格式如果该图连通,则输出一个整数表示最小生成树的各边的长度之和。如果该图不连通则输出 orz。krus

2021-10-31 19:45:12 239

原创 dijkstra算法及其优化

P3371 【模板】单源最短路径(弱化版)无优化版dijkstra#include<bits/stdc++.h>using namespace std;#define ll long longll n,m,s,u,v,w,res[10005];struct node{ ll v,w;};vector<node> mp[10001];bool vis[10001];int main(){ ios::sync_with_stdio(0); ci

2021-10-31 10:12:49 125

原创 算法学习:AC自动机

肝了好几天,太抽象,理解还需靠题目慢慢加深字典树和KMP的思想相结合的产物核心在于跳fail指针匹配失败,则跳向父节点fail指针指向的儿子结点P3808 【模板】AC自动机(简单版)题目描述给定 nn 个模式串 s_isi​和一个文本串 tt,求有多少个不同的模式串在文本串里出现过。两个模式串不同当且仅当他们编号不同。输入格式第一行是一个整数,表示模式串的个数 nn。第 22 到第 (n + 1)(n+1) 行,每行一个字符串,第 (i + 1)(i+1) 行的字符串表示编号为

2021-10-30 01:08:28 98

原创 P5495 Dirichlet 前缀和

题目背景模板题,无背景。模板题,很巧妙#include<iostream>#include<algorithm>using namespace std;#define ll long long#define uint unsigned intuint seed,a[20000001],pri[5000000],cnt;bool vis[20000001];inline uint getnext(){ seed^=seed<<13; seed^=s

2021-10-21 23:21:48 56

原创 数论刷题总结1

P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题题目描述输入两个正整数 x_0, y_0x0​,y0​,求出满足下列条件的 P, QP,Q 的个数:P,QP,Q 是正整数。要求 P, QP,Q 以 x_0x0​为最大公约数,以 y_0y0​为最小公倍数。试求:满足条件的所有可能的 P, QP,Q 的个数。输入格式一行两个正整数 x_0, y_0x0​,y0​。输出格式一行一个数,表示求出满足条件的 P, QP,Q 的个数。输入输出样

2021-10-21 23:03:50 511

原创 数论学习总结

欧拉函数性质:线性筛的同时也可以构造出欧拉函数和莫比乌斯函数for(int i=2;i<=100000;i++){ if(!vis[i]){ pri[++cnt]=i; e[i]=i-1; //对任意一个质数n,和它互质的数当然有n-1个(性质1) mo[i]=-1; //一个质数因式分解后只有自己,故为(-1)^1 } for(int j=1;j<=cnt,pri[j]

2021-10-21 22:42:49 51

原创 数论初步学习

队伍需要,我开始学习数论错过暑假,懊悔万分,尽快弥补埃氏筛法与线性筛法int pri[100010]={2},vis[100010],cnt;for(int i=2;i<=100000;i++) { if(!vis[i]){ for(int j=i;j<=100000;j+=i) vis[j]=1; pri[++cnt]=i; }}//cnt==9592for(int i=2;i<100000;i++){ if(!check[i

2021-10-17 01:52:46 116

原创 匈牙利算法——最大匹配

洛谷P3386 【模板】二分图最大匹配#include<bits/stdc++.h>using namespace std;int mp[505][505],m,n,e,used[505],link[505];bool dfs(int i){ for(int j=1;j<=n;j++){ if(mp[i][j]&&!used[j]){ used[j]=1; if(link[j]==-1||

2021-10-02 19:42:54 101

原创 CF52C Circular RMQ

题目地址题目描述You are given circular array a_{0},a_{1},…,a_{n-1}a0​,a1​,…,an−1​. There are two types of operations with it:inc(lf,rg,v)inc(lf,rg,v) — this operation increases each element on the segment [lf,rg][lf,rg] (inclusively) by vv ;rmq(lf,rg)

2021-10-01 11:15:27 82

原创 KMP——字符串匹配算法

KMP算法挺抽象,第一次接触理解不够深,以后通过题目慢慢了解。设字符串a长度为n,待匹配子串b的长度为m,暴力枚举法的时间复杂度为log(m*n)而KMP算法的时间复杂度为log(m+n),因为指向主串i只增不减,避免了多余的回溯。算法内容:首先构造一个数组PP[i]存储的是b串前i个字符前缀和后缀相同的最大字符个数例如b=“ababa”,则p={0,0,1,2,3}然后是匹配过程,例如:若让b向右移动一格是没必要的,利用已经预处理好的数组p可以让b向右移动一个前缀的距离,只需j=p[j]

2021-09-30 21:04:25 86

原创 每周算法学习总结:线段树

线段树是入门选手向正式选手过渡的重要算法工具相比于树状数组,线段树虽写起来麻烦,但是连续区间修改和查询的功能非常强大。像求区间之和,区间最大值,区间最大公因数等。其延迟标记更是其强大所在,因为在区间更新时,一点一点更新的时间复杂度时log(n),而利用延迟标记下推可以大大减少时间复杂度!模板:(杭电,张煊的金箍棒2)#include<bits/stdc++.h>using namespace std;//树状数组中,子节点的下标是父节点的2倍和2倍+1struct node{

2021-09-28 22:57:40 104

原创 博弈

Euclid’s Game题目给出了两个正数a.b每次操作,只能大的数减掉小的数的整数倍。一个数变为0的时候结束。谁先先把其中一个数减为0的获胜。问谁可以赢。Stan是先手。只需判断a >= 2*b即可,因为此时的局势是可控制的,若不然,则只能反复相减,此时局势不能控制。...

2021-04-15 23:59:44 46

原创 动态规划

GYM 101147 G.The Galactic Olympicsn场不同的比赛,派k个人去,一个人可以参加多场比赛且至少参加一场,每场比赛只能且必须要有一个人参加,问方案数k>n时显然无解,k<=n时吗,设dp[i][j]表示i场比赛分配给j个人的方案数j=1时,dp[i][1]=1j=i时,dp[i][i]=i!1 < j < i时,dp[i][j]=j*dp[i-1][j-1]+j *dp[i-1][j]第一部分表示如果前i-1场比赛已经分配给了j-1个人,那

2021-04-13 11:38:54 167

原创 题解报告: Supermarket,Muddy roads 贪心

Muddy roadsFarmer John has a problem: the dirt road from his farm to town has suffered in the recent rainstorms and now contains (1 <= N <= 10,000) mud pools.Farmer John has a collection of wooden planks of length L that he can use to bridge these

2021-03-13 19:36:33 98

空空如也

空空如也

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

TA关注的人

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