自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

BootStar

Just For Dream

  • 博客(25)
  • 资源 (2)
  • 收藏
  • 关注

原创 POJ 3667 Hotel

Hotel线段树:区间合并。首次写区间合并,开始的时候没有想明白怎么做。看了别人的解题报告,终于明白了操作的各种过程。其实与前面的线段树题目没什么太大的区别。主要是在线段树节点保存的值上多增加了一些。首先看节点域:struct Tree{  int l , r , lans , rans , mans , f ;}一共五个变量,l,r的含义与之前相同,为该区

2012-08-31 20:02:38 385

原创 hdu 1512 Monkey King and ZOJ 2334

Monkey King很裸的左偏树题目。直接应用就可以了。/*author : 中南大学 陈安PROG : hdu 1512data structure: 左偏树操作:采用最大左偏树,所以每群猴子中权值最大的一定在树根1.查询每群猴子中权值最大的,采用并查集,否则容易爆栈2.对于修改操作,可以分解为如下步骤:a.删除树根,合并左右子树,

2012-08-31 16:51:51 756

原创 hdu 4008 Parent and son

Parent and son树形DP题目。题目意思很简单,给定一个无根树,然后给定Q个查询x , y 查询以x为该无根树的根节点,然后查询y的最小儿子,以及中最小子孙。思路:首先我们规定树的根为1,然后进行一次dfs,求解出每个节点x的儿子节点中最小的和次小的,子孙节点中最小的,同时求出x的所有子节点保存的最小子孙节点中的次小子孙节点,以及每个节点x的父亲节点。数组含义如下

2012-08-27 21:45:00 1179

原创 Hduoj 2296 Ring

RingAC自动机+DP。方程很容易写出来,但是对于串的处理确实比较麻烦的。首先方程:dp[i][j] = max{ dp[i-1][k] + tag[j] },这里tag[j]表示到达j状态时所有的匹配得到的数目之和。在递推的时候我们需要注意如果一个状态没有被经过(或者说是没有到达),那么是不能用这个状态来递推到下一个状态的。所以在写的时候有长度为i的到长度为i+1的会更容易写。然后

2012-08-20 21:53:13 406

原创 POJ 3349 Snowflake Snow Snowflakes

Snowflake Snow Snowflakes哈希。首先是哈希函数的选择,先将每组的六个数字进行求和,然后对一个较大的素数取模。在就是判同构的问题,给定两个数字串,判定是不是循环同构的。因为本题中只有六个,所以我们直接枚举就可以了。#include #include #include #define maxn 100005#define mod 1000

2012-08-20 09:10:19 379

原创 POJ 1988 Cube Stacking

Cube Stacking 并查集的题目。题目大意:由N个箱子,有如下两种操作:M x y操作,每次将含有编号为x的箱子所在的一堆箱子移动到含有编号为y的箱子所在的一堆箱子上。C x 操作,询问x下面有多少个箱子。很容易想到用并查集,但是对于并与查操作怎么处理?一种很简单的方法就是我们可以取每堆箱子中的堆底箱子做为根节点,每当合并时,就将放在上面的那堆箱子所有的高度全部更新一下,但

2012-08-18 21:22:52 423

原创 POJ 2492 A Bug's Life and POJ 1703 Find them, Catch them

A Bug's Life并查集的应用。与食物链那到题目类似,对于关系明确的bug之间合并,用数组p[x]和d[x]分别表示x的父节点以及x与父节点之间的关系,我们可以假设d[x]=0表示x与p[x]是同性,d[x]= 1表示x与p[x]是异性。对于查操作的时候,我们不断的压缩路径,同时更新d[x]的值,这里d[x] = (d[x] + d[p[x]])%2,很容易推出来,具体看程序中f

2012-08-18 09:07:47 739

原创 POJ 3691 and Hduoj 2457 DNA repair

POJ 3691 DNA repairHduoj 2457 DNA repair        AC自动机+DP。先建立AC自动机,再来看DP。和前面类似考虑方程的时候我们可以结合字符串的长度与AC自动机的状态,来写方程。设dp[i][j]是单词长度为i走到j时最少需要修改单词的个数。那么考虑状态的转化,由于要不含致病基因,那么也就是状态不能走到叶节点。考虑状态j是由那些转化而来的

2012-08-17 16:53:07 507

原创 Hduoj 2243 考研路茫茫——单词情结

考研路茫茫——单词情结自动机+DP+快速幂取模+矩阵快速幂。这个题目和POJ2778很相似,不过这个是求出包含的有多少个。也就是用总的个数减去不包含的。由于长度是1~L内的,所以我们得把所有的情况都给求出来。首先是求构成单词的总的个数,也就是:26^1 + 26^2 + 26^3 +....+ 26^L,当然我们可以将其写成更一般的形式:26*(26^L -1)/25,但是这样计算有很大的问题

2012-08-17 11:01:15 3871

原创 POJ 2778 DNA Sequence

DNA Sequence     自动机的又一题。这个题目和前面的那个题目POJ1625很相似,不过POJ1625的数据范围没有这么大,如果按照那个题目那样递推过来的话,肯定会超时。对于这么大的数据,一般会想到加速计算,多采用二分法,例如:快速幂取模,矩阵快速幂。而这个题目就是用矩阵快速幂来加速计算的。和前面一样我们可以很容易的写出状态转移方程,其实是一样的方程,这里就不再写了。我们把这个

2012-08-16 19:48:56 431

原创 POJ 1625 Censored!

Censored!   这个题目写了一天多的时间,开始的时候,虽然对主要的思路清楚了,但是有些细节问题没有想清楚。在解DP的时候,开始写的时候没有对状态转化搞的很清楚,所以中间出现错误然后又调试了很久,这就浪费了很长的时间。以后还是想清楚细节之后再去敲代码,得训练一下写代码的思维,如何思考更有利于写代码,而不仅仅是注重于问题的解法是什么。   说下这个题目我个人的想法:先建立tri

2012-08-16 14:57:40 728

原创 POJ1953 World Cup Noise

World Cup Noise这个题目有点类似于自动机DP,就是给定由n位组成的01序列,求不包含连续的1的序列个数。由于长度为n的字符串是有长度为n-1的字符串组成的,所以我们可以这么考虑,长度为n的字符串可以怎样从n-1的转化过来,对于以0或者1结尾的长度为n-1字符串,可以添加一个0得到以0结尾的长度为n的字符串,而不会使得序列的合法性得到破坏,如果我们要获得一个以1结尾的字符串,我们只

2012-08-14 10:26:43 421

原创 POJ 1014 Dividing

Dividing题目意思很清楚,这里就不再翻译了。初始的时候,我将他当作分组背包(估计是最近做分组背包做的太多了),来解,但一直超时,后来分析了一下时间复杂度为O(v*n),看了一下数据后,发现根本不可能过的去,v最大可有90000,而n最大有20000,这样怎么可能过的去。。。。。。后来看别人的解题报告的时候,发现可以用多重背包。然后我就对比了一下两者的情况。用分组背包的时候是这么考虑的:每

2012-08-14 09:20:37 433

转载 RMQ and LCA

Range Minimum Query and Lowest Common Ancestor[翻译]本文转载自:http://www.cnblogs.com/drizzlecrj/archive/2007/10/23/933472.html。在此对作者以及农夫三拳表示感谢。Range Minimum Query and Lowest Common Ancestor 【原文见 htt

2012-08-09 20:56:30 356

原创 POJ 1325 Machine Schedule

Machine Schedule二分图匹配题目。首先是建图方式:如果两台机器分别在模式xk1 , yk2下能完成相同的工作,那么这两个模式连一条边。这样的话,每完成一个工作就相当于将图中的一条边给完成。这样问题就转化为寻找最少的点来看住所有的边,也就是最小点覆盖问题。最小点覆盖问题:   最小点的覆盖也是图的顶点集的一个子集,如果我们选中一个点,则称这个点将以他为端点的所有边都

2012-08-08 16:20:05 387

原创 CSUOJ 1258 维护序列

维护序列线段树题目。此题的更新必须要更新到叶节点,否则的话,会出现错误。对于一个int范围内的数字,更新若干次(最多32次)后必然会变成0,那么此时在更新就没有意义了。那么我们可以用lazy标记,当某个区间的数字全部变为0后,我们将这个区间做上标记。那么这个区间就不可能在被更新,这样就可以提高效率,减去不必要的更新。对于将一个数字的二进制位最低位1变成0,在做树状数组题目的时候我们常用一个lo

2012-08-08 13:49:12 449

原创 POJ 1067 取石子游戏

取石子游戏威佐夫博弈,对于给定的两堆石子个数(a , b)a 威佐夫博弈及其它博弈介绍 #include #include using namespace std ;int main(){ int a ; int b ; while(cin>>a>>b){ if(a > b){ a ^= b ;

2012-08-07 21:50:21 440

原创 hdoj 3298 Contestants

Contestants树形DP题目,这个题目与hduoj4081以及金华邀请赛的power station (POJ 4045)比较相似。不过这个题目相对于后面两个要简单的多。我们可以先进行一遍DFS处理出以1为根节点的树的所有节点的子节点数目,然后就是求最小差值。枚举每条边,这里可以直接枚举点来进行。注意数据范围就可以了。#include #include #include #in

2012-08-07 18:43:15 665

原创 hduoj 1561 The more, The Better

The more, The Better树形DP题目。树形DP+多重背包问题。由于初始化的原因,wrong了几次。方程很好写。我们先增加一个额外的节点0,同时将对应的攻克的城堡数目+1.方程如下:dp[r][j] = max(dp[r][j] , dp[r][j-k] + dp[u][k])其中u是r的儿子节点.#include #include #include #includ

2012-08-07 16:28:04 562

原创 POJ 1635 Subway tree systems

Subway tree systems这个题目是判断给定的两个序列是不是对同一棵树的遍历结果,也就是树的同构问题。首先可以求出一每个节点为根的子树的孩子节点的数目(包括该节点),然后对节点数目进行排序,那么这个排序的序列即可作为该树的一个最小表示,然后我们只需要判断两棵树的最小表示是不是相同即可。对于题目中给定的01序列是对于树的遍历结果,对于每一棵子树必定有相同个数的0和1,我们可以依据来求

2012-08-07 13:51:49 656

原创 POJ 1190 生日蛋糕

生日蛋糕一道很经典也很基础的搜索题目。有题目的条件我们可以得到两个方程:sum(Rk*Rk*hk) = N 和 S = sum(2*Rk*hk)+R1*R1首先考虑极端剪枝法。假设前i层体积为T,如果剩下的若干层,每层都去最小可能值,体积仍比N大,则剪去,如果剩下几层都去最大值,体积仍比N小,也减去。如果当前的表面积比S大,则剪去。然后考虑一个隐藏的条件,我们可以由式子sum(Rk *

2012-08-06 13:11:32 469

原创 POJ 1151 Atlantis

POJ 1151 Atlantis线段树+离散化+矩形面积求并。做完了前面比较简单的 POJ3277,再做这一题就知道怎么下手了。开始的时候我只打印一个算的面积,然后很果断的wrong了,之后就没想这道题目了,当我做其它题目的时 候,突然想起来,我没按照格式输出啊(狂晕)。然后我又将输出结果改了一下,一交PE了。哇咔咔,忽略了空行,。加了空行就过了,。     说下这个题目的思路,先离散化

2012-08-03 15:40:05 427

原创 POJ 3277 City Horizon

POJ 3277 City Horizon线段树+离散化+矩形面积。初次写这类题目,用了很长时间才搞明白其中的很多问题。这个题目是线段树+离散化+矩形面积中比较简单的了。首先如何求解矩形面积。求解矩形面积很简单:直接套用公式:长乘以宽,可是在这里矩形与矩形间有重叠,该怎么处理呢?矩形与矩形相交的边,我们可以找出来,那么求解矩形面积不就好求了么。由于本题中有一边是x轴,所以我们只要处理出

2012-08-02 23:40:39 368

原创 POJ 3764 The xor-longest Path

The xor-longest Path字典树的题目,开始看的时候毫无头绪,不知道怎么下手,看了别人的解题博客后终于明白了怎么做。这道题目出的很巧妙。之前比赛的时候遇到过一道类似的题目,不过当时我们没做出来,我们队伍还比较弱,还要奋斗啊。大致思路:由于以下式子的成立:(a^b)^(b^c) = c ,所以我们可以这样来建树,每个节点保存从根节点走到当前节点的异或值。然后我们建立一个01字典树。

2012-08-02 10:35:30 372

原创 hdoj 4081

Qin Shi Huang's National Road System今天作比赛,做了这个题目,整个比赛中就只做了这一道= =。太弱了= = 。这个题目是最小生成树+树形DP。要求的是A/B , B是非特殊边的距离和,而A是特殊边两端城市的人口之和,由于要使得比值尽量的大,所以我们肯定距离要最短。我们可以首先求一下最小生成树,然后直接枚举每条边,去除该边后所能产生的最大比值。我们需要用一个数

2012-08-01 16:12:22 734

AC自动机pdf

关于AC自动机的pdf文档,很清楚的讲解了AC自动机算法及应用

2012-08-07

程序设计导引及在线实践

介绍C++语言,然后介绍了常见的一些基本的算法以及一些POJ例题,为ACM入门者以及编程语言初学者提供帮助。

2012-04-25

空空如也

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

TA关注的人

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