自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

samscream的博客

大家好,三年的代码练习生

  • 博客(93)
  • 收藏
  • 关注

原创 dp中一些的基础问题

能用动规解决的问题的特点1)问题具有最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质。2)无后效性。当前的若干个状态值一旦确定,则此后过程的演变就只和这若干个状态的值有关,和之前是采取哪种手段或经过哪条路径演变到当前的这若干个状态,没有关系。什么是无后效性,看到一个很好懂的解释;(转)某阶段的状态一旦确定,则此后过程的演变不再受此前各种...

2018-09-26 21:10:36 1221

原创 POJ-2286 IDA*搜索(迭代加深搜索算法)

IDA*搜索又成为迭代加深搜索,感觉迭代加深这个称谓就基本概括了这种搜索算没的核心。首先所以讨论一下什么迭代加深搜索,深度优先搜索一个局面可以搜索很多很多层,这种情况很可能时间啊复杂度很大;怎么办呢?聪明的人们想到了限制限制了搜索深度,正是所谓的迭代加深搜索,就是在深度无上限的情况下,先预估一个深度(尽量小)进行搜索,如果没有找到解,再逐步放大深度搜索。这种方法虽然会导致重复的遍历 某些结点,但是...

2018-08-21 11:34:32 3222 4

原创 拓扑排序详解&pta-任务调度的合理性(25 分)

拓扑排序在cccc赛前学习的一个小知识点,觉得蛮有意思的,当时看陈越姥姥讲的数据结构,姥姥把拓扑排序比作文艺青年的排序,我觉得有必要记录下这个知识点。直接用姥姥的例子吧,计算机课程排课。学习某一门课程时,必须提前学其他的一些课程才能学这门课程,这就是预修课程,例如c3数据结构的预修课程的c1和c2,这就是说学习数据结构之前必须先学习程序设计基础和离散数学。根据每个课程的预修修课程画图可...

2018-04-13 14:59:59 3765

原创 HDU 4514 树形DP计算树的直径&并查集找环

#include<bits/stdc++.h>using namespace std;const int maxn=1e5+10;struct node{ int to,next,w;}e[maxn*20];int dp[maxn];//设dp[x]表示从节点x出发,往以x为根的子树走,能够到达的最远距离int head[maxn],fa[maxn];int f...

2019-11-21 23:37:33 148

原创 HDU-6629 string matching 2019杭电多校五 (扩展kmp)

扩展kmp:扩展KMP解决的问题:定义母串S和子串T,S的长度为n,T的长度为m;求 字符串T 与 字符串S的每一个后缀 的最长公共前缀;也就是说,设有extend数组:extend[i]表示T与S[i,n-1]的最长公共前缀,要求出所有extend[i](0<=i<n)。(注意到,如果存在若干个extend[i]=m,则表示T在S中完全出现,且是在位置i出...

2019-10-17 16:02:44 159

原创 HDU - 5573 2015ICPC B-Binary Tree(二进制构造、二叉树找规律)

题意:在一颗满二叉树中从根节点出发选一个路径,每个节点可加可尖,最终得到数n,输出路径。思路:最靠左的那条链可以表示出任何数,因为都是2的倍数,相当于用二进制在表示。需要注意的是,每个数+和-相差的是这个数的2倍,所以需要将n/2进行二进制运算。#include<bits/stdc++.h>using namespace std;typedef long lon...

2019-10-16 21:26:56 202

原创 牛客1

#include<bits/stdc++.h>using namespace std;const int maxn=100010;int dpa[maxn][20],dpb[maxn][20];int mm[maxn];//代表所有区间长度对应的log,如13这个长度的区间,我需要查询一个8长度的前缀区间,和一个8长度的后缀区间void initrmq(int n,int ...

2019-10-12 22:08:04 105

原创 2019牛客暑期多校训练营(第一场) - Path 双向最短路+dinic

#include<bits/stdc++.h>#include<iostream>#include<cstdio>#define make pair<int,int>using namespace std;typedef long long ll;const ll inf =1e16,maxinf=1e9+10;const int m...

2019-10-11 22:12:02 78

原创 2019牛客暑期多校训练营(第七场)A.String 最小表示法

#include<bits/stdc++.h>using namespace std;char s[1010],t[1010];bool solve(int l,int r){ int len=0; for(int i=l;i<=r;i++){ t[len++]=s[i]; } int i=0,j=1,k=0; wh...

2019-10-06 11:21:04 106

原创 BSGS算法 BZOJ2242

BSGS被用于求解离散对数,即同余方程: 求x的最小非负整数解。保证A⊥P(互质)。BZOJ2242:#include<bits/stdc++.h>using namespace std;typedef long long ll;ll qpow(ll a,ll b,ll mod){ ll ans=1; while(b){ ...

2019-10-03 20:06:20 100

原创 2019牛客暑期多校训练营(第四场)K.number (dp)

题意:给你一个字符串,求他有多少个子串是300的倍数思路:O(300n)的dp#include<bits/stdc++.h>using namespace std;const int maxn=1e5+10;int dp[maxn][310];typedef long long ll;int main(){ char s[maxn];scanf("...

2019-10-03 15:10:59 86

原创 2019牛客暑期多校训练营(第四场)A.meeting 树的直径

#include<bits/stdc++.h>const int maxn=1e5+10;using namespace std;struct node{ int x,d;};vector<int>mp[maxn];int ty[maxn],vis[maxn],p[maxn];int ans1=0,ans2=0;int point1=0,point...

2019-10-03 09:42:54 139

原创 2019牛客暑期多校训练营(第四场)C sequence 单调栈+线段树维护区间最大子段和

#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll maxn=3e6+10;const ll inf=1e18;struct node{ ll maxx,minn;}tree[maxn<<2];int a[maxn],b[maxn],pl[maxn],pr[...

2019-10-02 18:27:24 108

原创 Comet OJ - Contest #11Business (背包dp,dp最终化问题)

题意:你要计算如下模型能得到的最大钱数:有n天,初始时你的钱数为0,有m种可能操作,第 i种会使你当前失去ai​的钱数并在n天结束后返还 bi​的钱数。每一天可以执行任意多种操作,每种任意次(但每次操作后你的钱数不能为负)。每天结束时你会获得一个与当前持有钱数x相关的收入f(x) ,而f(x) 单调不增。思路:dp最终化问题,背包dpdp[ i ...

2019-09-25 20:40:45 89

原创 2019 ICPC沈阳网络赛 C Dawn-K's water(完全背包)

题意:有n种矿泉水,给出你每种矿泉水的价格和水量,现在给你一个m,让你求水量不少于m所花的最小价值,如果最小价值相同,则输出他可以获得的最大重量。每种水可以买多次。思路:完全背包枚举一下所有物品就好了,当时比赛错在背包的容量开小了,2*m是不够的,可能一个物品的重量就超过m了,所以要以数据范围为背包大小。#include<bits/stdc++.h>using n...

2019-09-23 20:24:23 260

原创 单调栈维护序列 & 维护矩阵 (HDU 3530 & 2019牛客多校三Planting Trees)

HDU 3350#include<bits/stdc++.h>using namespace std;const int maxn=1e5+10;int a[maxn];int q1[maxn],q2[maxn];//q2上升,q1下降int main(){ int n,m,k; while(~scanf("%d%d%d",&n,&m,...

2019-09-23 15:51:36 142

原创 HDU 5927 Auxiliary Set 树形搜索

题意:给你n个点的一颗树,q次查询,每次给你m个数,代表这颗树中的轻点,其他点是重点,对于每个查询计算这个课树中重点的数量加上重点lca的数量一共有多少个(即将两个重点是的lca是轻点的点计算进去)。思路:对于每个询问,中的轻点按照深度排序,遍历所有轻点,如果这个轻点没有儿子,就将其父节点的儿子数减一,即用深度深的轻节点更新深度浅的轻节点。如果轻节点的儿子数>=2,那么说明他至少...

2019-09-22 17:26:50 86

原创 CodeForces 486D vailid set 树形DP

题意:给一颗树,在树中寻找所有符合点权最大值和最小值相减小于d的联通子集。#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll mod=1e9+7;const int maxn=4e3+10;struct node{ int to,next;}e[maxn];...

2019-09-21 23:13:58 106

原创 2019 ICPC徐州网络赛I题(区间整除对数 && 树状数组)

题意:给一个1-n的排列的序列,m次询问,每次询问区间L—R之间内有多少个整除数对。思路:首先需要解决统计整除数对的问题,如果1-n是有序的序列,那么很好统计,每次将i加上i一直加到n,每次加到的数即是i的倍数,这个经典的方法即可以得到每个数与这个数成对的整除数对。对于这个题目,n个数是1-n的一个排列,所以需要稍微修改一下这个方法,将整除数对应的下标位置存起来。对于这个题目需要每个...

2019-09-12 15:45:53 226

原创 2019牛客暑期多校训练营(第三场)

B题意:给一个01串,寻找这个串的最长0、1个数相等字串和0、1个数相等子序列思路:01子序列直接看0、1个数中最少的即可,找子序列二分答案长度,O(n)看每个长度是否合法即可#include<bits/stdc++.h>using namespace std;const int maxn=1e5+10;int a[maxn],sum[maxn],ob[m...

2019-09-07 21:53:05 72

原创 2019牛客暑期多校训练营(第八场)

BBeauty Values题意:求出n个数中,所有子区间的不同元素的个数的和思路:期望的线性性dp[ i ]代表第i个位置的数a[ i ]对于前i个数中的子区间产生的贡献为多少,如果这个数第一次出现,那么这个数a[ i ]对于前面出现的i个包含a[ i ]的区间都有贡献。如果这个数不是第一次出现,他就会对a[ i ]到他上一次出现的地方之间的所有子区间产生贡献。#...

2019-09-03 14:06:26 92

原创 2019 杭电多校 第十场 HDU 6693 (概率)

题意:给n个物品,每个物品有一个被选中,任选k个,怎么选才能使从k个物品中选一个物品的概率最大思路:因为这个式子由两部分组成,一部分是累乘一部分累加,所以可以将这个式子拆开来写这样枚举i从1到n即可但是a[1]=1.0的时候,1-a[1]=0,这样前缀和就不对了(除零错误),需要特判#include<bits/stdc++.h>using...

2019-08-30 11:06:44 133

原创 分块,莫队算法浅析

分块 CDoj 1324#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e5+7;int block,belong[maxn],num,l[maxn],r[maxn],n,q;ll a[maxn],Max[maxn];void build(){ bl...

2019-08-01 00:54:35 180

原创 HDU 4638 线段树离线操作

#include<bits/stdc++.h>using namespace std;const int maxn=1e5+10;int a[maxn];struct node{ int l,r,v;}tree[maxn<<2];struct pp{ int l,r,id;}po[maxn];int pre[maxn],ans[maxn];...

2019-07-24 21:44:27 102

原创 poj1064 Cable master(二分)

#include<cstdio>#include<cstring>#include<cmath>#define maxn 10010#define INF 100001double a[maxn];int n,k;bool dix(double x){ int num=0,i; for(i=0;i<n;++i) ...

2019-07-24 21:43:47 63

原创 Gym - 101982C 方案数dp

题意:给你n个题目,让你从中选取k个题目来生成一场比赛,每个题目有一个难度等级,一场比赛中题目的难度等级不能重复,让你求方案数。思路:#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll mod=998244353;int a[1010];ll dp[1010][1010...

2019-07-24 11:32:47 182

原创 SPOJ-DQUERY D-query 主席树——查询区间有多少种数

题意:n个数,q次查询,每次查询 l 到 r 的区间内不相同的数有多少个。idea:主席数维护每个叶子节点有几个数出现过。#include<bits/stdc++.h>using namespace std;const int maxn=30010;struct node{ int l,r; int v;}T[maxn*40];int cn...

2019-07-19 16:53:14 363

原创 HDU4630 线段树离线操作 && GCD性质

题意:n个数,m个询问,每次查询一个区间的中任意两个数的最大GCD思路:离线操作,按照查询的右端点将查询从小到大排序。预处理出所有数的因子用二维vector保存。遍历整个这n个数,每个数遍历它的因子,如果这个因子在前面出现过,则将这个因子维护到线段树中,并将因子最新出现位更新,如果没有出现过则将当前此因子最新出现的位置标记为当前。线段树用来维护区间的最大因子。因为区间两次以上出现过的最...

2019-07-15 18:46:23 201 1

原创 2019ICPC南昌邀请赛网络赛J题 树上主席树&链上边权第k大

裸的树上主席树需要注意:1.最后需要查询的部分是:query(1,n,root[l],root[r],root[lca],root[lca],k))即l+r的前缀和减去两个lca的前缀和2.这里的倍增操作,需要使用log数组先预处理出来,否则会超时#include<bits/stdc++.h>using namespace std; ...

2019-06-30 20:05:32 185

原创 2-SAT问题 HDU-1814

#include<iostream>#include<cstring>using namespace std;const int maxn=100010;struct node{ int to,next;}edge[maxn];int head[maxn],tot=0;void init(){ tot=0; memset(head,-...

2019-06-24 20:13:06 80

原创 牛客小白月赛14 G. many sum

#include<bits/stdc++.h>using namespace std;int a[2000100],b[2000100];int main(){ int n,a1,m; cin>>n>>a[1]>>m; for(int i=2;i<=n;i++){ a[i]=(a[i-1]+7*i...

2019-05-12 00:32:52 169

原创 状压dp初步——最优配对问题,货郎担问题(TSP)

最优配对问题 :枚举集合s‘中任意两点i,j使得s’集合中的状态最优,并将s'中的最优状态转移给s集合。#include<bits/stdc++.h>#include<iomanip>using namespace std;const int inf=1e9;struct node{ double x,y;}p[25];double dp[1&...

2019-05-08 19:51:18 407

原创 SPOJ COT Count on a tree 树上主席树&链上点权第k大

题意:给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),输出节点u到节点v这条链上第k大的点。思路:树上主席树,对于树上每一个节点建一个权值线段树,利用lca求出u-->lca-->v这条链,对于这几颗线段树root[u],root[v],root[lca],root[f[lca][0]],利用容斥计算出这条链上的权值线段树,再进行查询。#inclu...

2019-05-01 09:58:27 279

原创 可持久化线段树&主席树----查询区间第k大(POJ-2104)

题意:求区间第k大的数是哪个看了卿姐的的视频学会了主席树#include<iostream>#include<vector>#include<algorithm>using namespace std;const int maxn=2e5+6;int n,m,cnt,root[maxn],a[maxn];struct node{ ...

2019-04-24 19:55:32 464 1

原创 Codeforces Global Round 2 D.Frets On Fire // 差分+二分+前缀和

题意:n个数,每个数是一个序列的起点,后面无限个数每个数比前一个大1,形成的这n个序列。t次查询,每次查询所有序列的区间l--r,所有区间的l--r中的数形成一个集合,输出这个集合中一共有多少种数。思路:这里数的大小1e18说明这是一道规律题,这里有一个规律,对所有数从大到小排序后,求一个差分数组cf,代表两个数之间的差,如果r-l+1就是查询的区间的长度,那么每个数产生序列对这个...

2019-04-11 19:44:39 161

原创 kuangbin基础dp HDU-1024 (m个不相交子段和最大值)

#include&lt;iostream&gt;#include&lt;cstring&gt;using namespace std;int maxx[1000100],dp[1000100],a[1000100];int main(){ int n,m; while(cin&gt;&gt;m&gt;&gt;n){ memset(dp,0,sizeof(...

2019-03-17 20:02:35 193

原创 UVa348 最优矩阵链乘 (记忆化搜搜&&dp&&输出路径)

最优矩阵链乘:一个n*m的矩阵由n行m列共n*m排列而成。两个矩阵A和B可以相乘当且仅当A的列数等于B的行数。一个n*m的矩阵乘m*p的矩阵,运算量为n*m*p。矩阵乘法不满足分配律,但满足结合律。因此A*B*C既可以按顺序(A*B)C也可以按A(B*C)来进行。假设A、B、C分别是2*3、3*4、4*5的,则(A*B)C运算量是2*3*4+2*4*5=64,A(B*C)的运算量是3*4...

2019-03-07 20:01:52 151

原创 kuangbin基础dp POJ - 3186 // (区间dp//记忆化搜索)

题意:给一个数组v,每次可以取前面的或者后面的,第k次取的v[i]价值为v[i]*k,问总价值最大是多少。 思路:dp[i][j]代表从i-j的区间,先取i或者先取j得到的最大值记忆化搜索代码:#include&lt;iostream&gt;#include&lt;cmath&gt;using namespace std;int dp[2010][2010],v[201...

2019-02-27 15:42:13 184

原创 kuangbin基础dp HDU - 1160 // 最长上升子序列+记录路径

题意:输入中每行有两个正整数,分别表示老鼠的体重和速度,范围均在1到10000之间,输入数据最多有1000只老鼠。我们是要在原来的老鼠序列中,找到一个最长的子序列,使得这个子序列中老鼠的体重在严格增加,速度却在严格降低。思路:按照体重排序后,对速度跑一个最长上升子序列,dp形式的,方便记录路径,这里的记录路径和链式前向星原理比较像,在dp时记录最后更新这个节点的前一个节点的序号,dp完...

2019-02-27 09:43:43 211

原创 kuangbin基础dp HDU - 1069 (最长有序子序列变形)

题意:给出一些长方体,然后让你把他堆成塔,要求下面的塔的要比上面的塔大(长和宽),而且每一种长方体的数量都是无限的。思路: 将长方体的6种长款高都提取出来保存到结构体种,按照长度优先相等的按照宽度排序,得到的序列跑一个最长下降子序列就出来了,dp[i]代表第i个塔为最上层塔,当这个塔为止的塔的最大高度。#include&lt;iostream&gt;#include&lt;al...

2019-02-26 11:17:56 158

空空如也

空空如也

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

TA关注的人

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