自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

老臣

有时,我可能脆弱得一句话就泪流满面,有时,也发现自己咬着牙走了很长的路。

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

原创 51nod 1299 监狱逃离 树形dp/最小割

题意:监狱有N条道路连接N + 1个交点,编号0至N,整个监狱被这些道路连在一起(任何2点之间都有道路),人们通过道路在交点之间走来走去。其中的一些交点只有一条路连接,这些点是监狱的出口。在各个交点中有M个点住着犯人(M <= N + 1),剩下的点可以安排警卫,有警卫把守的地方犯人无法通过。给出整个监狱的道路情况,以及犯人所在的位置,问至少需要安排多少个警卫,才能保证没有1个犯人能够逃到出口,如果

2017-10-26 08:26:38 264

原创 bzoj1801 [Ahoi2009]chess 中国象棋 DP

题意:用中国象棋中的规矩,在棋盘上摆炮要求不能被攻击,求方案数。 明显一列一行不能超过2个。 那么我们就可以以此转移,考虑一行行的来放,那么dp只跟行与行之间的关系有关。 设f[i][j][k]表示前i-1行做完了,现在做第i行,有j列只有一个棋子,k列只有两个棋子。 那么有6种转移,至于如何实现,请看代码,这里不进行详写。 其实主要分为三大类。 一.放0个 直接继承 二.放1个

2017-10-25 22:05:42 225

原创 NOIP5424. 【NOIP2017提高A组集训10.25】凤凰院凶真 LCIS 方案

题意:求lcis以及其方案。 原题:千帆渡 n<=5000. 很明显的DP。 设f[i][j]表示做到a的第i位,结尾是b的第j位,这样子便于记录方案。 那么明显有 f[i][j]=max(f[i][k-1])+1(b[j]>b[k]&&j>k)f[i][j]=max(f[i][k-1])+1(b[j]>b[k]&&j>k) 由于规定了a[i]=b[j],所以上面的可以变成 f[i]

2017-10-25 20:41:26 239

原创 bzoj1179: [Apio2009]Atm tarjan+spfa

题意:一个有向图求从s出发,到某一些规定点的最长路径。 一开始不化模型然后直接无脑dfs,这就是不把最短路当最短路,煞笔一个我,样例都过不去才发现问题。 然后简化了一下题意。。这不就裸的么。没什么好说的。#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#define fo(i,a,b) for(int

2017-10-25 17:15:07 503

原创 JZOJ5411. 【NOIP2017提高A组集训10.22】友谊 DP

DescriptionFlowey 是一朵能够通过友谊颗粒传播LOVE 的小花.它的友谊颗粒分为两种,圆粒的和皱粒的,它们依次排列组成了一个长度为2m 的序列.对于一个友谊颗粒的序列,如果存在1<=i<j<=2m,满足以下条件:1)i 为偶数,j 为奇数2)第i 颗友谊颗粒和第j 颗友谊颗粒同为圆粒或同为皱粒3)第i 颗友谊颗粒和第j 颗友谊颗粒都还没有被使用过那么,就可以使用这两颗友谊

2017-10-25 16:21:24 505

原创 bzoj2724 [Violet 6]蒲公英 分块

题意:强制在线,求区间众数。 说实话还没有用过除了反演莫队以外的分块。。 具体的话就是分成sqrtn块,然后记录每一块的答案和前缀。 然后询问的时候,如果#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd

2017-10-24 21:45:19 261

原创 JZOJ5419. 【NOIP2017提高A组集训10.24】线段树

很烦人的线段树= =。不过理解了以后还是挺好打的,就是太长。 具体的话就是维护每一个区间内到左端点右端点的最小代价和最左边,最右边的可用的位置,然后直接更新就好了,至于查询的话,就是查询中位数咯,查询一下中位数左右两边最靠近他的可用的点,然后取个代价最小的。#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b

2017-10-24 17:16:00 254

原创 JZOJ5418. 【NOIP2017提高A组集训10.24】 树形DP+组合数

题意:给出n个数,有一些特定要求,形如x,y表示x一定要在y的左边,求排列方案数。一早上死想序列做法,想到了一下连边然后否决了。。然后想出了50分的容斥或者状压,然后觉得100分是不是再优化一下啥的,然后就再没脱出坑。。 事实证明部分分做法不一定是正解做法的暴力版本。。 首先有一个条件就是每一个人最多提出一个要求。 那么连边后的dag是一个森林,不相交的n棵树。 那么对于每一棵树,我们从下往

2017-10-24 17:05:12 327

原创 JZOJ5417. 【NOIP2017提高A组集训10.24】 二维线段树

题意:给一个矩阵,q次询问子矩阵,查询最大值最小值,区间和, 每个询问的方阵的长不超过宽的两倍。屁股后面那个两倍什么玩意儿的你想用就用,我不想用,懒得打什么鬼畜的rmq,去他的,二维线段树多爽,直接过。 然后我比赛把前缀和打错了啊啊啊啊啊!!! /喷血 犯了史上最傻逼错误没有之一,更让我绝望的是,我打拍的时候直接把前缀和那个地方黏过去用所以根本没拍出来/喷血。 血的教训,希望我能铭记。#inc

2017-10-24 14:49:43 324

原创 NOIP模拟总结10.23-11.1

10.23 今天考的比较差。。。 T1比较脑抽。完全没想到用数组来模拟,然后无脑上了个trie,发现没办法维护,然后打了个一个可持久化trie,还用bitset加速合并和拆分,结果复杂到爆炸。。。正解其实就是个模拟+组合数学题目。。 T2一开始觉得是最短路,用样例试了一下发现有点问题。。然后觉得是斜率优化,但是由于T1花的时间太多,导致我根本没有时间打,只是打了个50分草草收场。。 T3没有

2017-10-24 08:07:17 359

原创 bzoj1878 [SDOI2009]HH的项链 主席树

题意:求区间不同自然数个数。 主席树裸题,记录一下last[a[i]]表示上一个数出现的位置,然后用主席树预处理差分一波,接着就可以直接做了。 还要在细一点的话,就是说,我在i这个位置上把ai加上去,然后在last[a[i]]的地方把它减掉。。#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(

2017-10-23 22:19:33 370

原创 JZOJ5415. 【NOIP2017提高A组集训10.22】公交运输 DP

题意不说了。有点鬼畜,比赛只会50分,花了30分钟思考一无所获,连按模分组都没想到迟早退役。 然后花了十分钟打50分扔了这题。巨亏。 其实比赛还剩一个小时的时候发现是斜率优化,但是没时间打所以就放了。。 事实上这并不是简单的斜率优化,,因为如果直接做不能保证他的斜率是单调递增的。 首先先把点按模分组,只有%c相同的点才能被到达。 然后就可以直接斜率优化了,每次先枚举c,对于栈中的点,我们把

2017-10-23 21:39:29 377

原创 JZOJ5416. 【NOIP2017提高A组集训10.22】密码 DP

Description现在身为校庆志愿者的小C正在引导校友们到他们集合的教室。终于,忙了一段时间的他可以休息一会儿了。这时,旁边一位老校友的话吸引到了他。“我后来当了一名探险家,有一次,我来到了一个地方,在正前方有一扇门,旁边写着一行文字:’现在给你前m个字符串G,有一个拼接规律T,它是一个长度为m的一个排列,你要把现在已经得到的最后m个字符串按照T的顺序拼接起来,得到一个新的字符串,用这种方法,你

2017-10-23 17:29:32 464

原创 bzoj3555: [Ctsc2014]企鹅QQ hash

题意:给出n个相同长度的子串,问有多少对只有一个位置不同。 hash练手题。。算出前缀后缀的hash以后,枚举哪一个位置不同,然后统计就好了。 注意不能%,或者质数太小都会冲突。#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,

2017-10-23 08:25:12 194

原创 JZOJ5408. 【NOIP2017提高A组集训10.21】Dark DP

DescriptionLichKing 希望收集邪恶的黑暗力量,并依靠它称霸世界。 世间的黑暗力量被描述成一个长度为N 的非负整数序列{Ai},每次它可以选择这个序列中的两个相邻的正整数,让他们的值同时减一并获得一点邪恶力量,直到不存在满足条件的数。 然而你不希望他能够得逞,所以你会使得他收集的能量尽可能少。题意很明显了。 一个不难的dp,然后我自己滚动了一波把自己滚死了。。直接清空又会T。。

2017-10-22 16:55:56 391

原创 bzoj1978 [BeiJing2010]取数游戏 game DP

题意:给 N 个数,用 a1,a2…an来表示。现在小 P 让小 C 依次取数,第一个数可以 随意取。假使目前取得 aj,下一个数取ak(k>j),则ak必须满足gcd(aj,ak)≥L。 到底要取多少个数呢?自然是越多越好! 不用多说,这不仅是给小 C 的难题,也是给你的难题。 一个比较简单的dp。 记录pre[j],表示最后一个能整除以j的数的位置,一边dp一边更新,那么设f[i]表示以i结

2017-10-21 23:03:55 182

原创 bzoj2006 [NOI2010]超级钢琴 堆+ST表/主席树

题意:Y sera 陷入了沉睡,幻境中它梦到一个长度为N 的序列{Ai}。 对于这个序列的每一个子串,定义其幻境值为这个子串的和,现在Y sera 希望选择K 个不同的子串并使得这K 个子串的幻境值之和最大。 然而由于梦境中的种种限制,这些子串的长度必须在L 到R 之间。 你需要告诉她,最大的幻境值之和。比赛题目的描述直接拿过来用了。 很久之前做的一道题目,所以没有第一时间认出来,而且当时也

2017-10-21 16:10:34 340

原创 bzoj4401块的计数 dfs

题意:把一棵树分成几块,要求方案数,每个块内是一个联通块。 啊明显,只有那些x|n的数可能成为答案。 然后对于x进行判断,自己画图想想就能发现,只有x|sz[i]的sz[i]个数=n/x,即分成n/x块,每块x个数,才可行,大概解释一下就是,如果x|sz[i],那么这个以i为根的子树肯定能分成sz[i]/x个块。 然后搞个桶来统计,每次不需要遍历所有sz,只需要在桶内log计算就可以了,这是一

2017-10-20 22:33:11 152

原创 bzoj2709 [Violet 1]迷宫花园 二分+spfa

题意:一个矩阵,起点终点固定,有障碍,横向相邻两格的时间固定为1,要求纵向的时间,然后给定L,要求从起点到终点在<=L的情况下尽量大。 这煞笔二分题啊,还不卡精度简直良心啊,然后我因为没写head[x]=tot而调了半个小时。。???没脸见人了┴─┴︵╰(‵□′╰)。#include<cstdio>#include<cstring>#include<iostream>#include<alg

2017-10-20 21:40:51 278

原创 bzoj3155: Preprefix sum 树状数组

题意:动态修改,查询前缀和的前缀和。 一开始下意识树套树,看了看别人长度果断否决了= =,然后没什么思路。 然后我试着化简了一发。。 SSi=∑j=1i(n−j+1)∗a[j]SSi=\sum^{j=1}_{i}(n-j+1)*a[j] 水题。#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) fo

2017-10-19 18:10:48 184

原创 bzoj1296 [SCOI2009]粉刷匠 分组背包/单调队列优化

题意:windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果windy只能粉刷 T 次,他最多能正确粉刷多少格子? 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。这题太恐怖了QAQ,虽然模型还是能一步步推出来,但是脑洞好大。。 首先处理每一行

2017-10-18 22:04:54 262

原创 bzoj2730 [HNOI2012]矿场搭建 tarjan 点双连通分量

题意:一个无向非连通图,要求每个点的矿工都能走到救援口,可能会把任意一个点ban掉,要求最少的救援口,使得每一个点都能走到救援口,以及最少救援口的方案数。首先很明显,如果ban掉的点不是割点没影响。 所以一个很明显的结论就是我们每一个块内设一个救援口,那么第一个问题的答案就是块的个数。 还有特例就是,如果一个块链接两个割点,那我ban掉一个以后还有另外一个,所以这种情况下,这个块内不用设立新的点

2017-10-18 21:15:54 461

原创 51nod 最大M子段和 V1,V2,V3 dp 贪心 heap(bzoj2288)

题意:给一个长度为n的序列,要求选出m个不相交的部分,要求总和最大,如果m>= n个数中正数的个数,那么输出所有正数的和。。 V1:n,m<=5000. V2:n,m<=50000. V3:n,m<=500000.V1: 一个简单的DP。 明显有f[i][j]表示做到第i个,选择了j段。 那么可以推导: 新开一段f[i][j]=f[i−1][j−1]+a[i]f[i][j]=f[i-1

2017-10-17 17:25:34 411

原创 bzoj1023 [SHOI2008]cactus仙人掌图 树形DP+单调队列

题意:给一颗仙人掌求直径。 经典好题。 一开始naive的想以为缩点以后直接求,想了想感觉自己是傻子。。块内的根本无法统计。 大概能想到DP求解,但是单调队列真心被震惊到了= = 设f[x],表示以x为起点(从上往下)的最长路径,对于树边/非树边分别转移,树边当让直接转移了,主要是非树边,非树边就是环上边,我只用环上的点更新f[x](x为环上深度最小点),这个需要DP。 树边情况,对于f[

2017-10-17 16:43:01 266

原创 bzoj1307玩具/1318[Spoj744] Longest Permutation

题意:给你一个序列,从某一位置开始取,要求严格上升,取了多少个,取的最后一个就要多大。问最大的长度。nlogn还是挺好想的,但是丽洁姐说的O(n)两遍真不知道该咋做= =。。 就是把原序列映射一下,然后做lis,只是会T。。 正解?输出max(滑稽) 这个不用我贴了吧。

2017-10-16 18:30:30 652

原创 bzoj2091[Poi2010]The Minima Game DP

题意:给出N个正整数,AB两个人轮流取数,A先取。每次可以取任意多个数,直到N个数都被取走。 每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大。 在这样的情况下,最终A的得分减去B的得分为多少。原谅我见识短浅还没见过这种操作= =。 首先把N个数从小到大排序,使得我选取多个数肯定是一段区间。 设f[i]表示选取前i个数的时候,最大差是多少。 f[i]

2017-10-16 08:55:46 200

原创 bzoj1293: [SCOI2009]生日礼物 单调队列

题意:一条x轴,上面n个,k种珠子,让你找一个最小长度,使得里面有k种珠子存在。单调队列裸题啦,相信各位dalao看见单调队列就知道怎么做了。 只是为什么你们都这么长呢?#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) fo

2017-10-15 22:51:58 209

原创 bzoj1132 [POI2008]Tro 计算几何

题意:有n个点,求任意三个点组成的三角形面积之和。一眼叉积,然后没有把式子写下来所以没有发现前缀和性质= =。。。 然后又被斜率卡了,用double直接除就会炸,int强制转double就能对是什么鬼。。 具体的话就是用叉积计算面积,对于一个点k来说,他的贡献等于(sum.x-k.y)*(sum.y-k.x),那么枚举第二个点,加进来按照斜率排个序以后直接做。#include<cstdio>#

2017-10-14 09:52:53 222

原创 bzoj1257[CQOI2007]余数之和sum 数论

题意:给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数。例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7第一眼以为是水题,后来发现自己脑补的性质是萎的。。 好像要硬做qaq x%i=x-int(

2017-10-14 08:28:20 243

原创 bzoj2208 [Jsoi2010]连通数 dfs

题意:求每个点出发能经过的点数,n<=2000。 这明显签到题吧喂,签到都太水了啊= =。跑的贼慢我好虚。结果还是过了。#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using

2017-10-13 20:37:48 230

原创 bzoj1864 [Zjoi2006]三色二叉树 树上DP

题意:给你一棵二叉树,让你给这棵树染色,可以染三种颜色(红绿蓝),相邻节点,兄弟不能同色,求最多最少有多少个点是绿色点。 很简单的dp啦。 读入有点小坑,一开始被坑了一下。。 然后读题不是很认真没注意到原来兄弟也不行。。那么对于f[x][0]的情况就从三种变成两种咯。 设f,g,意义很明显,第二维表示是否绿色点。 随便推推。#include<cstdio>#include<algorit

2017-10-12 18:39:24 265

原创 bzoj1047[HAOI2007]理想的正方形 单调队列

题意:有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小。 早就看过这题了,解法其实很简单啦,但是我单调队列经常打错,然后没什么信心去搞这题= =最后想了想还是要锻炼一下自己就来刚了一波。 这应该是一个二维单调队列一样的东西,具体的话就是单调队列求出每一个点往左n个的最小最大值。 然后每一次对于一个n*n的矩形,枚举他的长宽起点(或者

2017-10-12 17:23:26 292

原创 数论 公式集合

由于深感本人数论水平之差,防止大考翻车,在这里把常见的数列通项公式和递推公式列,以及各种奇奇怪怪的玩意儿都列出来。。 1.fibonacci F(0)=0,F(1)=1,F(n)=F(n−1)+F(n−2)(n>=2,n∈N∗)F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)2.Catalan h(n)=C(2n,n)/(n+1)(n=0,1,2,...

2017-10-12 16:24:55 1034

原创 Atcoer Grand Contest 001 F 拓补排序 STL

题意:给定一个1⋯n的排列{pi},给定一个K,对于pi=pj+1且|i−j|≥K可以交换pi和pj的值,求经过变换可以得到的最小的字典序。神题= =完全没什么想法,没想到暴力90分,数据水的不行了。 首先做出原序列的对应序列,设为q[i]。 对于q[i],所有满足|i−j|<=K且pi<=pj|i-j|<=K且pi<=pj的,连边求出最小字典序就是答案。 这样子连边复杂度是n^2。 怎么优

2017-10-12 15:46:24 454

原创 bzoj1131 [POI2008]Sta 树形DP

题意:给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大由于结论题做多了第一反应结论。 觉得找直径好像没什么问题,但是WA。并找不出为什么错= =。后来发算就算不wa也会tle,因为大一点的菊花图我就炸了,因为我找不出最小的,如果要找出所有的直径端点,如果是菊花图,复杂度就是n^2.. 正解其实挺简单啦,明显的dp,每次换根的贡献O(1)计算,注意在一个点上方的贡献固定,

2017-10-11 22:24:38 228

原创 codeforces 858F&&JZOJ5404graph dfs

题意:给定一张n个点m条边的无向图,每条边连接两个顶点,保证无重边自环,不保证连通 你想在这张图上进行若干次旅游,每次旅游可以任选一个点x作为起点,再走到一个与x 直接有边相连的点y,再走到一个与y 直接有边相连的点z 并结束本次旅游 作为一个旅游爱好者,你不希望经过任意一条边超过一次,注意一条边不能即正向走一次又反向走一次,注意点可以经过多次,在满足此条件下,你希望进行尽可能多次的旅游,请计算

2017-10-11 18:09:29 344

原创 JZOJ5401. 【NOIP2017提高A组模拟10.8】Star Way To Heaven prim求mst

whx大爷的题目怎么搞都能虐我= = 比赛的时候以为是神题然后没把时间放在上面,失策= = 其实并不难。(为什么你们都做过拯救小云公主那题啊。。) 假设我们的答案为ans,那么对于每一个点画一个半径为ans的圆,如果能从左走到右不经过圆那么ans就是成立的。 这样看来好像二分答案就可以了,然而n<=6000,带个log会被卡。 事实上,我们只要对于n个点的完全图,做mst,然后找出里面最大

2017-10-09 12:40:25 834

原创 JZOJ5399. 【NOIP2017提高A组模拟10.7】Confess bitset

Description小w 隐藏的心绪已经难以再隐藏下去了。 小w 有n + 1(保证n 为偶数) 个心绪,每个都包含了[1,2n] 的一个大小为n 的子集。 现在他要找到隐藏的任意两个心绪,使得他们的交大于等于n/2 。Input一行一个整数n。 接下来每行一个长度为k 的字符串,该字符串是一个64 进制表示,ASCII 码为x 的字符代表着x-33,所有字符在33 到33 + 63之间。

2017-10-08 11:14:32 406

原创 JZOJ5400. 【NOIP2017提高A组模拟10.7】Repulsed 树型DP+贪心

题意:小w 心里的火焰就要被熄灭了。 简便起见,假设小w 的内心是一棵n -1 条边,n 个节点的树。 现在你要在每个节点里放一些个灭火器,每个节点可以放任意多个。 接下来每个节点都要被分配给一个至多k 条边远的灭火器,每个灭火器最多能分配给s 个节点。 至少要多少个灭火器才能让小w 彻底死亡呢?whx大爷的题目。 设f[x][k]表示在x的子树中,距离x为k的灭火器有多少个点能分配。

2017-10-07 22:57:27 602

原创 bzoj2086[Poi2010]Blocks 单调栈

题意:给出N个正整数a[1..N],再给出一个正整数k,现在可以进行如下操作:每次选择一个大于k的正整数a[i],将a[i]减去1,选择a[i-1]或a[i+1]中的一个加上1。经过一定次数的操作后,问最大能够选出多长的一个连续子序列,使得这个子序列的每个数都不小于k。 总共给出M次询问,每次询问给出的k不同,你需要分别回答。 因为操作次数不限,因此若一段区间平均值超过K,即为一组合法解 将A

2017-10-06 16:05:57 258

空空如也

空空如也

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

TA关注的人

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