自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

GODSPEED

这世界从来就只有强者的奋斗史,而没有弱者的墓志铭

  • 博客(43)
  • 资源 (1)
  • 收藏
  • 关注

原创 HDU 5296 Annoying problem(点到树链的距离+LCA)

题目大意:给一棵带权树,和一个集合S,初始为空。现有两种操作:1、选择某个顶点加入S2、将S中某个顶点去掉。问:每次操作后,使得集合S中的点联通的最小边权和是多少。思路:首先这道题可以用到一个公式,就是树上的点到某一个树链的距离,假设这个点是n,一条树链的两个端点是u, v,那么点到这条树链的距离D = dist(n) - dist( lca(n, u) ) - dis

2015-10-31 01:19:56 356

原创 HDU 5293 Tree chain problem(树形DP+树链剖分+LCA)

题意:给出一棵有n个结点的树,树上有m条链,每条链有一个权值,选出最多没有重复节点的链,使得权值和最大。思路:树形DP+树链剖分+LCA。首先处理出每条链两个端点的LCA并保存起来。用dp[i]表示以i为根节点的子树的最大值,sum[i]表示i的儿子节点的dp值的和,即sigma(dp[j]),j是i的儿子节点。这样状态转移方程也可以得出,当i节点不放链的话,dp[i] = sum[i

2015-10-29 17:56:28 476

原创 HDU 4871 Shortest-path tree (树分治+SPFA)

题意:给出一个连通的无向图, 然后找一颗生成树, 生成树满足点1到每个点的书上距离都是原图中的最短路, 然后在满足最短路的条件下, 点1到每个点的树上路径的序列字典序最小找出这个树之后, 给出K询问树上有K个结点的路径的最大边权值, 以及这样的最大边权值的路径的方案数。思路:spfa的过程中建树,建好树后点分治。#include#include#include#inclu

2015-10-29 02:02:43 390

原创 Codeforces Gym 100379J Move the (p, q)-knight to the corner!(DP+lucas定理)

题意:现在有一个棋盘,要从(1,1)处走到(n,m)处,中间有k个坏点不能走,每次只能走(x+p y+q)或者(x+q, y+p)的位置,问有多少种走法。思路:这道题是 Codeforces Gym 100589F Count Ways(DP+组合数学) 的强化版。我们要想办法将这道题转化为这个简化版,考虑这样一个问题,如果从(1,1)走到某一个位置(x,y)那么一定没有或有且仅有一种

2015-10-28 11:39:38 711

原创 Codeforces Gym 100589F Count Ways(DP+组合数学)

题意:就对于一个H*W的棋盘从点(1, 1)走到(H, W), 每次只能x++或者y++地走, 其中棋盘上有n个点是坏点, 也就是不能走的点, 那么从(1, 1)到(H, W)不经过这n个坏点的路径有多少种, H, W 思路:组合数学+DP。如果没有坏点的话方案数显然为C(h+w-2, h-1),现在有了坏点,不能直接求出来,考虑DP。首先将所有坏点按坐标排序,用dp[i]代表到达

2015-10-26 22:18:55 488

原创 Codeforces Gym 100589A Queries on the Tree(树状数组+分块)

题意: 给出一颗以1为根的树, 初始的时候每个节点上的硬币数量都是0, 树的结点个数为N 思路:树状数组+分块。因为要输出的是以x为根的子树的结点和,所以不难想到将树转成线性结构,然后用树状数组维护前缀和。但是这样有一个问题,就是当某一深度节点数量太多时,单次修改的复杂度可能达到n*logn无法承受。还有另外一种修改方式是记录每个深度被修改的值的和,然后对于询问,求出当前子树每个深度的

2015-10-26 19:11:31 475

原创 HDU 4354 Missile(树形DP)

题意:给出C个城市,这C个城市中每个都属于M个国家中的某个国家,然后敌人想炸毁K个国家的城市。两个国家如果有关系那么只能摧毁其中一个,保证不存在环,求出最小花费。思路:一般这种计算最大值减最小值最小的题都是要枚举+验证。这题也是一样,先按照所有城市的x坐标排序,然后对于当前枚举的区间,用in数组表示每个国家有多少个城市在当前这个区间之内,然后树形DP求出最多可能这个区间内最多可以攻击多

2015-10-25 14:09:46 348

原创 HDU 4352 XHXJ's LIS(数位DP+LIS+状态压缩)

题意:给出一个区间,求这个区间内把数字看成字符串后最长上升子序列(可以不连续)为k的个数。思路:可以用类似求lis的方法来做,因为k最大只有10,而且lis中的g数组是递增的,g的值只有可能取0到9,所以我们可以用状态压缩表示当前g数组中0到9是否出现,然后在数位dp的时候计算状态即可。#include#include#include#include#include#include

2015-10-24 23:38:29 392

原创 HDU 4340 Capturing a country(树形DP)

题意:给出一棵树,现在有两种颜色给这棵树染色,用a颜色给i节点染色的花费是a[i],b颜色同理。如果与i点相邻的点被染上了a色那么染i点只需花费a[i]/2。思路:树形DP。用状态dp[i][j][1]表示以i为根节点的子树中i染上了j色,且与i相邻的全价点在i为根节点的子树中,相应的用状态dp[i][j][0]表示以i为根节点的子树中i染上了j色,且与i相邻的全价点不在i为根节点的子树中。

2015-10-24 19:30:02 417

原创 HDU 4326 Game(概率DP+高斯消元)

题意:就是现在有N个人标号从1到N排队, 每次队首的4个人开始游戏, 4个人中每个人胜利的可能性是相等的, 现在胜利的人会留在队首, 继续游戏, 输的人会回到队尾(回到队尾的顺序与进入游戏idea顺序一致, 比如说1,2,3,4比赛, 2获胜, 则2留在队首, 1,3,4在队尾的顺序依旧是1,3,4(4在最后)现在如果某个人连续赢了M局游戏, 那个人就是最终得获胜者, 问长度为N的队伍当中

2015-10-24 01:36:43 502

原创 HDU 4275 Color the Tree(哈希+树同构+组合数学+树形dp)

题意:给出一颗n个结点的数,现在用m种颜色给每个节点染色,问不重复(通过旋转)的染色方法数有多少种。思路:这道题主要是要解决对称而导致的重复的问题,所以选择根节点时要选择树的中心,所以可以先bfs求出树的直径,如果直径上的结点个数为奇数,那么取直径的中点作为中心dfs,如果是偶数那么在两个中点位置的中间新建一个节点。用dp[i]表示以i为节点的子树中方案有多少种 ,那么对子树的形态哈希后排

2015-10-23 09:43:55 607

原创 POJ 1635 Subway tree systems(HASH+判断两棵有根树是否同构)

题意:给出两棵树,判定是否同构(通过旋转使得形状相同)。思路:HASH+dfs。HASH的方法用的就是杨弋《Hash在信息学竞赛中的一类应用》里的方法,但是一开始hash的p选的不好导致wa了,换了一个素数就ac了......真是看脸.......#include#include#include#include#include#include#include#include

2015-10-22 18:02:14 1318

原创 HDU 4126 Genghis Khan the Conqueror(最小生成树+树形DP)

题意:一个N个点的无向图,先生成一棵最小生成树,然后给你Q次询问,每次询问都是x,y,z的形式, 表示的意思是在原图中将x,y之间的边增大(一定是变大的)到z时,此时最小生成树的值是多少。最后求Q次询问最小生成树的平均值。 N思路:树形dp好题,想了一天加看题解才做出来。不难想出,如果更改边权的那条边不在最小生成树中,那么这次修改后的结果还是最小生成树的值。问题是如果修改的这条边恰好在最小

2015-10-22 14:40:09 791 8

原创 CodeForces 343D Water Tree(树链剖分+dfs时间戳)

题意:有一棵树,每个节点有一个权值0或者1,有三种操作,第一种是将结点u和它的子树中的结点权值全部置为1,另一种是将结点u及其祖先节点权值全部置为0,然后还有查询操作,查询某个结点的权值。思路:树链剖分。对于第一种操作,可以利用dfs时间戳记录u子树中最后一个节点在线段树中的位置,然后将子树中所有结点置为1。对于第二种操作就是常规的树链剖分。第三种查询操作只需要在线段树中单点查询即可。#i

2015-10-21 14:29:57 775

原创 HDU 4052 Adding New Machine (线段树)

题意:有一个w*h的矩阵,里面放着n个矩形,现在有一个1*m的矩形要放置到这个矩形中,问有多少种放法。思路:对于一种放法,只要求出可以放置矩形的起点组成的面积就行,那么我们可以把这个问题转化为求矩形面积交。对于横放和竖放分别求起点组成的面积,对于横放,那么矩形靠前的那条边的前m-1个位置不能当做矩形的起点,这样我们求出不能当矩形起点的面积,然后做差就行,特别要注意当m为1的时候,因为这时候

2015-10-21 12:02:51 347

原创 HDU 1255 覆盖的面积(线段树求矩形面积交)

题意:给出n个矩形,求出至少被两块矩形覆盖的面积。思路:跟面积并类似的做法,不同的是每个节点要额外维护一个至少被覆盖两次的长度dcnt,此外还是要维护至少覆盖一次的长度cnt,然后每次由当前结点的cover标记和子节点的dcnt,cnt值来推出当前结点的dcnt,cnt值。#include#include#include#include#include#include#incl

2015-10-20 00:19:03 843

原创 HDU 1542 Atlantis(线段树求矩形面积并)

题意:给出n个矩形的两个端点,求出它们的面积并。思路:求矩形的面积并模板题。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps 1e-6#define LL long

2015-10-19 22:02:01 371

原创 CodeForces 589G Hiring(树状数组)

题意:有n个工作要在m天之内完成(n,m思路:树状数组。对工作按d降序排列,每天的工作时间按降序排列,然后用两个指针扫一下,对于一个工作j来说,将工作时间大于j.d的日期全部插入到树状数组中,用树状数组维护前i天的工作时间和,还有前i天插入了多少个工作日,然后对于每个工作二分来找出最早完成时间即可。#include#include#include#include#include#

2015-10-19 11:15:52 595

原创 POJ 1836 Alignment(DP | LIS)

题意:有一个序列,现在从中去除一些数,使得每个数比左边或右边的所有数都大。思路:LIS。可以看出最后答案中的序列一定是一个递增或递减或一个递增加一个递减序列组成,所以我们可以预处理出每个位置左边最长上升子序列的长度,和右边最长下降子序列的长度,然后扫一遍求出相邻位置的二者和的最大值就是最后序列中的元素数量。#include#include#include#include#inclu

2015-10-17 01:56:17 367

原创 POJ 3267 The Cow Lexicon(DP)

题意:给出一个字符串和一个字典,求出最少删除这个字符串中的几个字符使得字符串是字典中单词的一个组合。思路:DP。用dp[i]表示以i为后缀的字符串中最少删除几个字符使得字符串是字典中单词的一个组合,那么我们就可以得到状态转移方程dp[i] = min(dp[i], dp[pos+1]+pos-i+1-strlen(word)),初始化dp[i] = dp[i+1] + 1。#include

2015-10-16 23:25:57 300

原创 Codeforces Round #326 Duff in the Army(主席树+LCA)

题意:给出一棵树,每个节点有一个权值集合,现在有q个询问,query(u,v,a)表示询问u到v之间的前a小的数。思路:主席树+LCA。关于这道题的简化版详见http://blog.csdn.net/u014664226/article/details/47850199这道题不同之处在于每个节点有多个权值,而且要输出前a小的数,只需要在建树时和查询时稍微改动一下即可。查询时从第1小

2015-10-16 03:28:48 947

原创 POJ 1276 Cash Machine(DP多重背包)

题意:给出一个价值sum,然后给出n,代表n个方案,接着n对代表个数与价值,要求最接近sum,但不超过sum的价值。思路:多重背包,拆分成二进制转化01背包。#include#include#include#include#include#include#include#include#include#include#include#include#include

2015-10-15 21:49:52 367

原创 POJ 1837 Balance(DP)

题意:现在有一个天平,有n个刻度处有挂钩,另有m个砝码,计算出能使得天平平衡的方案数,每个砝码必须用到,每个挂钩不一定要用到。思路:DP。用dp[i][j]表示放置前i个砝码后天平左右两侧的差值为j的方案数,然后递推即可。#include#include#include#include#include#include#include#include#include#inc

2015-10-15 18:53:17 302

原创 CodeForces 383D Antimatter(DP)

题意:给出一个数字序列,每个数字可以随意增添正负号,问有多少和为0的不同的子串。思路:DP。用dp[i][j]表示以前i个数字中以i结尾且数字和为j的不同字串数量,然后就可以写出状态转移方程dp[i][j+a[i]] = (dp[i][j+a[i]]+dp[i-1][j]) % MODdp[i][j-a[i]] = (dp[i][j-a[i]]+dp[i-1][j]) % MODd

2015-10-15 16:41:45 362

原创 POJ 3744 Scout YYF I(概率DP+矩阵快速幂)

题意:有一段路,路上有n个雷,问不踩到雷安全通过这段路的概率,每次可以走一步或两步,走一步的概率为P,走两步的概率为1-P.思路:如果这段路上只有一个雷且雷在终点的话,那么到达每个点i的概率可以递推得来,p[i] = P*p[i-1] + (1-P)*p[i-2],现在的问题是路上有许多雷,不能直接这么做,那么我们可以考虑将这段路分成n部分,每部分的终点是一颗雷,对每一段分别求出能通过这段路的

2015-10-15 12:56:34 416

原创 Light OJ 1334 1334 Genes in DNA(KMP)

题意:给出一个文本串T和模式串P,求P的任意前缀和后缀的组合(前缀和后缀不能是原串P)在T中出现的总次数。思路:KMP算法思想,首先我们需要求出T中以每个位置i结束的前缀数量ans1[i],然后我们将T翻转,类似地求出以每个位置i结束的后缀数量,那么答案就是任意相邻两个位置的前缀数量*后缀数量之和。以求前缀数量为例,这里用到了KMP算法的思想,首先预处理出模式串P中以位置i结尾的所有前缀数

2015-10-15 01:42:48 448

原创 LightOj 1428 Melody Comparison(KMP+后缀数组)

题意:给出一个字符串T和一个字符串P,求T的不包含P的不同子串数量。思路:首先我们可以求出每个位置i可以延伸的不包含P的最远距离,记为rmax[i],那么答案就是sigma(rmax[i])减去重复的一部分,处理重复的一部分可以利用后缀数组的height数组,也就是说答案就是sigma(rmax[sa[i]] - min(height[i], rmax[sa[i]])),现在的问题就是求出

2015-10-14 13:13:59 437

原创 LightOj 1268 Unlucky Strings (KMP+矩阵快速幂)

题意:给出一个字符集和一个字符串s,再给出一个长度n,求出所有以字符集中的字母组成的长度为n的不含s的字符串的数量。思路:用矩阵ans[i][j]表示当前正在匹配第i个字符转移到下一次匹配第j个字符的方案总数,那么最后的答案就是sigma(ans[0][i]),(0 #include#include#include#include#include#include#include

2015-10-14 01:05:06 664

原创 LightOJ 1258 Making Huge Palindromes(manacher算法)

题意:给出一个字符串,可以在字符串的右边任意添加字符,问最少添加多少个可以使新串成为回文串。思路:manacher算法,求出以能到达右端点的最长回文串的长度,然后就可以轻松求出答案了。#include#include#include#include#include#include#include#include#include#include#include#incl

2015-10-12 23:53:00 385

原创 LightOJ 1427 Substring Frequency (II)(ac自动机水题)

题意:给出一个文本串和若干模板串,求出每个模板串在文本串中出现的次数。思路:ac自动机。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps 1e-6#define L

2015-10-12 22:21:10 375

原创 UESTC 87 Easy Problem With Numbers(扩展欧几里得+线段树)

题意:给出一个序列,对这个序列进行了三种操作,一种是查询。查询区间[l. r]内序列的乘积,一种是乘法修改,将区间[l. r]内全部元素乘以一个数,另一种操作是区间除法修改,保证除法合法,输出时将结果模除m(m可能为合数)。思路:如果这道题m是质数那么就是一个裸的线段树,现在m可能为合数,逆元可能不存在,那么考虑把一个数a分解成b*c的形式,使得b是由m的质因子相乘得来,c与m互质,那么对于c

2015-10-12 01:20:39 387

原创 POJ 3280 Cheapest Palindrome (区间DP)

题意:给出一个字符串,每个字符增加或删除有一个费用,求出使得这个字符串变成回文串的最小花费。思路:区间DP。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps 1e-6

2015-10-09 23:01:02 262

原创 HDU 2476 String painter(区间DP)

题意:给出两个全部由小写字母组成的字符串A和B,每次可以把字符串A的一段全部修改为同一个字母,问至少需要多少次操作才能把A变成B。思路:这道题很久以前做过但是昨晚做的时候发现一点思路都没了.....想了一天,自己稍微总结了一下这个题。首先,我们用dp[i][j]表示把一个空白串的区间[i, j]变成B的区间[i, j]的最少修改次数,那么我们可以得到一个状态转移方程,ans[i] = mi

2015-10-09 21:18:02 323

原创 CodeForces 149D Coloring Brackets(区间DP+dfs)

题意:给出一串已经匹配好的括号,现在要给它们上色,每个括号可以选择蓝色,红色,不上色三种情况,但是相邻的括号颜色不能相同,(可以同无色),每一对匹配的括号都有且仅有一个括号染色。思路:首先预处理出每个左括号的匹配括号位置,然后用dp[L][R][i][j]表示合法的括号序列区间[L, R]且左括号L颜色为i,右括号R颜色为j的涂色方案数,那么转移就可以分为两种来进行了,第一种是

2015-10-08 20:43:44 418

原创 POJ 2955 Brackets(区间DP水题)

题意:给出一个括号序列,求出最长的合法序列的长度。思路:区间DP#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps 1e-6#define LL long long

2015-10-08 18:35:41 343

原创 《Orange's 一个操作系统的实现》学习笔记(二) 实模式和保护模式

保护模式下的内存寻址8086一共有20位地址线,最大只有1MB的寻址能力,所以实模式下物理地址的计算公式是物理地址 = 段值 * 16 + 偏移段值被存放在段寄存器中,并且段的最大长度不超过2^16,也就是64kb。从80386开始cpu进入32位时代,寻址空间达到4GB,保护模式下段寄存器保存不了段的所有信息且寄存器的个数有限,所以不能采用实模式的寻址方式,而是一种新的方

2015-10-08 16:55:13 676

原创 Codeforces Round #324 Anton and Ira(构造+贪心)

题意:给出两个的1到n的排列,现在要交换第二个序列的元素位置使之变成第一个序列,交换一次的代价为两个位置的差的绝对值,现在问最小花费以及操作。思路:构造题,首先为了方便,把第二个序列看成一个递增的n的排列,然后对第一个序列中的元素重命名。把交换操作拆成两个移动操作来看,即假设每次交换的花费是2*|i-j|,把i移动到j和把j移动到i的花费均为|i-j|,那么不难发现我们至少需要sigm

2015-10-08 16:47:45 413

原创 SGU 4444 Travel(最短路+bfs)

题意:给定一个完全图,其中有两种边,长度为a(不超过5e5)或长度为b(剩下的),求有1~n的最短路径(数据范围1e5)。思路:这题的答案显然分为两种情况,第一种1到n的边长为b,这时我们要求长为a的这些边从1到n的最短路,因为边长都相同,一次bfs即可。第二种情况是1到n的边长为a,此时我们要求长为b的这些边从1到n的最短路,因为边数太多,直接bfs肯定t,考虑用一个set维

2015-10-06 20:42:49 397

原创 HDU 4261 Estimation(set预处理中位数+dp+缺页中断t个爽)

题意:给出一个序列A,分为K个部分,然后每个部分给出一个B(自己给出),使得所有的∑(|Ai-Bi|)最小。思路:首先这道题看起来比较像 POJ 1260 也就是说任意一堆数中取一个使得∑(|Ai-B|)最小,那么我们肯定取这些数的中位数作为B,但是这道题与poj 1260不同的是这里的数是不连续的,也就是说我们要动态维护一个中位数,我们可以用两个set s1,s2来维护,

2015-10-05 19:05:54 623

原创 HDU 5492 Find a path(DP)

题目大意:给N*M(1从(1,1)出发,每次只能向右或向下移动,到达(n,m)时,经过的格子的权值形成序列A,求(N+M−1)∑N+M−1i=1(Ai−Aavg)2的最小值。思路:将原式化简后可得T*sigma(ai^2) - (sigma(ai))^2,其中T=(n+m-1),那么我们用dp[i][j][k]表示当前在位置(i,j)且当前路径长度为k的最小sigma(ai

2015-10-04 03:21:11 399

百鸡问题详解

c语言实验题中的百鸡问题对理解c语言很有帮助多看无害

2014-04-11

空空如也

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

TA关注的人

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