自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Bysen32

当梦想照进现实

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

原创 POJ 3735 构造矩阵乘法

看来还是要吧这个矩阵乘法理解透啊!我的题解大体和网上的一样吧。没有什么可取性。对于矩阵,我们熟悉的操作有两种,交换与置零。我们有初始的矩阵T[ A,B,C,D ];交换矩阵为                       | 1 0 0 0 |       [ A,B,C,D ]  X  | 0 0 1 0 |  =>[ A C B D ]

2012-03-31 22:28:28 569

原创 HDU 2243

这题WA了.. 实在找不出错,CP了很多AC代码,大数据都是一样的。哪位大神行行好帮我看看哪错了吧.....#include#include#include#define kind 26#define MAX 100using namespace std;struct node{ int fail,flag; int next[kind]; vo

2012-03-30 18:47:29 528

原创 POJ 3233 等比矩阵的前N项和

第二次做这个题了,犹豫再三还是交了,果断秒A,嘿嘿~感觉不错啊~下面说一下思路:对原矩阵A构造一个2n*2n的方阵。E为单位矩阵,0为0矩阵。| A E || 0 E |这个矩阵的平方为:| A^2 A+E || 0      E      |右上角的A+E就是A^1+A^0就是前两项的和。通过这个构造矩阵的K次方,右上角的N阶矩阵就是前K项和,这前K项其实是0

2012-03-30 13:50:25 762

原创 POJ 2778 AC自动机+矩阵乘法

这题要写的东西很多,以至于我不知道从哪里开始写了= =。总之要正确理解AC自动机中的状态转移。时间比较晚了,早点回去... 我要注意的地方就是正确理解fail指针的作用。在失配时,fail指针如果走向的是一个病毒节点那么改节点的转移也是病毒节点。不能转移!另外要注意的就是mod十分的耗时间啊!两次TLE都是出于此....总之是一道好题#include#include#inc

2012-03-28 22:12:19 617

原创 初等字符串匹配专题小结[KMP][Manacher][Tire Tree][AC Automation]

刷了3天的字符串匹配题。为了下面继续切题,小的先小结一些。字符串匹配的最基础算法是枚举(n^2)。高深一点的是KMP。KMP在数据结构课上学过,由于老师只是负责教学,不负责解答他不懂的问题,于是KMP就这么被我搁置一边了。ACM这么多年了,一直不懂这些基础的算法,实在有愧与心。于是乎专程学习了一下KMP。先说说KMP的主要思想。KMP用于模式串的匹配。下面看看一个字符串

2012-03-24 22:28:42 833

原创 HDU 3065 AC自动机模板题

最后一道模板题。下面把AC自动机小结一下。请看新文章.....这题如果只开26的next的数组的话。在查询大串时,要注意的if( s[i] )当不符合条件时,不能浅显的continue,而要把p=root;不然..... 那些在A-Z之外的字符会直接略去,相当于大串中没有A-Z之外的字符,结果可想而知!!#include#include#include#define MA

2012-03-24 21:19:58 497

原创 HDU 2896 AC自动机

第二道AC自动机。和前面那道没有什么不同,都是基础的AC自动机模板。题目大意:有一些病毒序列,在主串中找到所有的病毒种类即可。求出每个网站携带的病毒种类。最后输出有多少个病毒网站。还好输出不坑爹!#include#include#include#define MAX 128using namespace std;struct node{ int id

2012-03-24 18:44:17 442

原创 HDU 2222 AC_Automation 第一道AC自动机

整整一天半都在弄AC自动机,我的第一道AC自动机。DEBUG N久竟然是题目意思读错了!题目大意:给定N个单词,和一个模式串,求在单词模式串中出现的次数。解题思路,先构造字典树,再对字典树进行AC自动机。我DEBUG N久.... 原来AC自动机都是构造的对的!题目要注意的地方。1.单词可以重复出现。2.只是问最多有多少个单词出现在模式串中,最多为单词数N个。继

2012-03-24 17:02:46 480

原创 HDU 1671 轻轻松松字典树

这题的难度和前一篇的裸模版差不多。题目大意就是看字符串是否是其他字符串的前缀,其实就是在字典树中查看最后一个节点的count数是否为1.若为1,则代表该字符串唯一。若不唯一,则代表该字符串被其他字符串完全包含,不就是前缀么!水过。。。#include#include#include#define MAX 10using namespace std;c

2012-03-23 12:00:19 474

原创 POJ 2001 字典树裸模版

再做几个字典树就去AC自动机...... 加油!用模板感觉不错啊!!细节细节!!#include#include#include#define MAX 26using namespace std;struct TireNode{ int nCount; TireNode *next[MAX];};TireNode Memeroy[11

2012-03-23 09:52:55 580

原创 HDU 1251 字典树裸模板

以前也写过字典树,觉得自己写得很不好,很水很弱,虽然也ac了。网上看了下别人的模板,果断学习之.......#include#include#include#define MAX 26 using namespace std;struct TrieNode{ int nCount; TrieNode *next[MAX];};TrieNod

2012-03-23 08:59:31 565

原创 HDU 3746 Cyclic Nacklace KMP的性质应用

前面做过类似的题了,所以切出这个来也很简单。关于KMP的小应用,KMP的next数组的作用就是用来记录前面的串的状态的。可以用Len-next[Len]得出当前点的循环节。。。这个还是很好理解的。好了KMP在切掉POJ的就在此告一段落了。。。。#includeusing namespace std;char t[111111];int next[111111];int

2012-03-23 01:17:07 481

原创 HDU 3336 KMP+DP

匹配用的KMP,另外+DP存储状态;DP数组f[i]代表当前前缀可以匹配的次数。f[i]=f[next[i]]+1;为next[i]--i的的前缀的数量。计算总和即可。#includeusing namespace std;char t[222222];int next[222222],f[222222]; int L;void setNext(){

2012-03-22 22:03:53 484

原创 HDU 2087 水KMP

KMP...#include#include#include#includeusing namespace std;char s[1111],t[1111];int next[1111];int lenS,lenT;void setNext(){ int j=1,k=0; while( j<=lenT ) {

2012-03-22 21:55:10 549

原创 HDU 1711 裸KMP

终于会KMP了... 哇哈哈哈~#includeusing namespace std;int T,N,M;int next[11111];int s[1111111],t[11111];void setNext(){ int j=1,k=0; while( j<=M ) { if( k==0 || t[j]==t[

2012-03-22 21:52:25 625

原创 POJ 3461 HDU 1686 赤果果的KMP

果断吃果果....不解释...#includeusing namespace std;char s[1111111],t[11111];int next[11111],lenS,lenT;int cnt;void setNext(){ int j=0,k=-1; next[0]=-1; while( j<lenT ) {

2012-03-22 21:48:36 933

原创 POJ 1961 HDU 1358 KMP的性质

题目大意:求给出串的每个前缀串的重复次数。例如aabaabaabaab;1.aa中前缀a出现2次。2.aabaab中前缀aab出现2次3.aabaabaab中前缀aab出现3次4.aabaabaabaab中前缀aab出现4次.大概就是这么个意思。这里利用了kmp中的next标记的性质。看看这个字符串下标:1  2  3  4  5 6  7   8 9  10

2012-03-22 21:41:17 543

原创 POJ 3974 最长回文 Manacher算法

容斥刷不动啊!!今天十分的邪恶加猥琐的注册了一个小号和大一的孩子们一起做题;也没有要和他们比赛的意思,只是我对算法有很多不熟悉的,所以呢....哎 我的号交几个题,小号交几个题。做都做了,不管了。晚上花了一个半小时才看懂的一个算法Manacher,专门用来做回文的....网上其他的人写得佷详细了,我还是说说自己的吧。Manacher利用了回文的性质。假设有一个回文以id为中

2012-03-22 21:21:20 722

原创 HDU 1796 How many integers can you find 容斥原理

WA了N久N久... 最后发现原来是自己有些特殊情况没有存好。一个条件读入的数据要符合(1,N)这个区间范围内....在处理的时候没有处理好,天真的没有排除,只是当有这样的数据的时候跳过.... 当然... 悲剧发生了= =无限WA.....使用容斥原理...容斥原理就不讲了..我用的位运算做的...等会儿再用dfs做一下....#include#include#i

2012-03-21 19:21:45 551

原创 HDU 2446 Shell Pyramid 二分查找

今天上午终于把最后一题D题水掉了。我的二分也算是AK了了吧。这题可以说我还是有版权的,嘿嘿~~越来越有意思了!说一下怎么做吧。听说有公式就试着自己推了一下,感觉不错呢。首先我们可以看出a1=1,a2=3,a3=6. 很显而易见的an=(1+n)*n/2;那么Sn怎么求呢???Sn=∑an=(1/2)∑(n*n+n)=0.5*(∑n*n+∑n);这样就转化为连续自然数平方

2012-03-21 09:33:47 905 1

原创 POJ 2004 最长升序子序列

比赛中切掉的... 代码很冗余,没怎么仔细想总之,是一个最长升序子序列的题啦。#include#include#include#includeusing namespace std;struct node{ char line[25]; int len; int count[27];}date[11111];bool cmp( node a,n

2012-03-20 13:48:24 554

原创 HDOJ 4004 The Frog's Games 二分

去年网络赛没做出这道题来...真是惭愧惭愧啊...恶补了一下二分,感觉难度和for循环差不多。等把五个二分题AK后,用hash再来做一边吧。补习中....思路:二分查找渡河最小能力值。用能力值来渡河...正确判断算法的时间复杂度可以省很多代码时间的啊....受教了....本来做题使用的两次二分,比较依据为跳跃次数。后来发现不需要两次... 一次即可..#include

2012-03-20 13:45:15 724 4

原创 POJ 3122 Pie 二分

没想到上次做这个题恰巧是一年前啊....当年被这题虐了,不知道怎么做,记得自己还佷傻逼的画了个矩阵...还是没有想到做法,上网看了下思路,说是二分,但是码畜还是不会这题啊!!!今天做了一下,发现很水= =。当年我是有多傻逼啊!!!直接二分半径,找到输出就可以了。果然浮点型的二分和整型的二分还是有不同的,多多练习一下吧!加油!death_acmer.#include#i

2012-03-20 10:23:26 838

原创 POJ 2785 4 Values whose Sum is 0 二分

简单的二分.. 不过写挫了... 4000*4000我算成了16W... 丢死人了...交题果断RE,还百思不得其解....后来改掉之后果断TLE了,自认算法没错,难道是函数调用的关系?对比了一下AC程序发现在二分查找的过程中有一个break条件没加...改掉之后ac了。另外发现sort的cmp调用十分的占时间。按照默认的升序sort吧,这样省时间。以上为题解.#inclu

2012-03-20 09:51:21 712

原创 HDU 2141 二分

下午练习一下二分吧,感觉写得很挫....用A和B两个数组的和作为一个附加数组,求Ai+Bj+Ck=X只需要去搜索A+B的和为X-Ck即可....#include#include#include#includeusing namespace std;int sum[255555];bool cmp( int a,int b ){ return a<b; }int X,Y,Z

2012-03-19 16:53:38 503

原创 POJ 2002 Square 计算几何

一道水题,关键是要敢做....枚举两个点,做直线,作为正方形的一条边,然后由一条边可以确定另外的两个点。可以形成两个正方形,再用二分查找找出这两个点是否存在,若存在则方形个数++。最后答案除以4就可以了。时间不怎么好2844ms... 等会儿多用几种方法优化一下....#include#include#include#include#includeusing namespace

2012-03-19 16:15:04 539

原创 HDU 1992 递推= =

这题好玩!对这种图形递推题终于攻破了!哇哈哈哈!就是递推找规律!好玩啊~#includeint main(){ int N; __int64 f[1001]; f[0]=f[1]=1; f[2]=5; for( int i=3;i<=1000;i++ ) { f[i]=f[i-1]+f[i-2]*4; int len=1;

2012-03-16 22:45:21 728

原创 HDU 1421 搬寝室

好好琢磨一下吧 DP....#include#include#include#includeusing namespace std;int f[2222][2222];int min( int a,int b ){ return a<b?a:b; }bool cmp( int a,int b ){ return a<b; }int powsum( int a,int b ){

2012-03-14 21:58:27 403

原创 HDU 3535 混合背包

看来还是需要好好理解背包的含义啊!本来鄙人写了3600+的代码,各种悲剧。果然还是对背包的理解不深啊!看过人家的代码后才A出来.....#include#include#includeusing namespace std;int dp[111][111];int max( int a,int b ){ return a>b?a:b; }int max( int a,in

2012-03-14 20:27:12 566

原创 HDU ACboy needs your help 隐藏的分组背包水题

前几天对这题编了码。自己本地都跑不过。罢了,谁叫我不会做呢= =。今天被树形DP虐了,没想法了= =。回头准备切切这题。分析了一下特点:总共要学习N天,每门课程学习的天数都有不同的价值。在每门课程中只能选择一个指定的天数来学。Wait!!! 怎么感觉好像分组背包的描述!背包容量为要学习的N天,每门课程为一个分组,分组中每个物品的代价是学分,花费是学习的天数。而分组背包为:在每个

2012-03-13 20:35:35 614

原创 HDU Bone Collector II 背包的K优解

算法比较容易想到,每次做背包操作都会产生值的。记录下排序就好了。不过关于排序的问题我倒是wa了很久,本来开个3维数组把所有的解都记录下来,然后排序取出K大的就好了。但是却wa了= =没办法,看网上的题解吧。大家的方法和我想的差不多,也是对每个背包维护k个最优值。解法还是网上的,我就不废话了。就是记录2K个值,然后归并在一起。我的想法没错啊,为嘛WA呢=3=#include#inclu

2012-03-13 19:00:47 491

原创 HUD I love sneakers! 变化的分组DP

网络上题解很多。我就不乱说了。首先分组背包的原型:给物品分组,容量为V的背包,每个分组内的物品互斥,每个分组最多取一个物品。求最大值。代码很简单:for( int i=0;i<group;i++ )for( int j=V;j>=0;j-- )for( int k=0;k<total[i];k++ ) f[V]=max( f[V],f[V-cost[k]]+value[

2012-03-13 11:43:10 704

原创 HDU 2571 命运 水DP

消极题解凑数= =话说今天的水题有点多了= =本来想用最短路做的,但是不想那么麻烦,滚动数组也不想用,能水就水吧。记得以前做过一道类似的,不过是走路方针可以斜线,飞跃什么的,各种神。不过是BFS+队列罢了+GCD 罢了罢了还是水,不说了....#include#include#includeusing namespace std;int max( int a,int b ){

2012-03-12 17:35:08 481

原创 HDU 2577 How To Type DP

哈哈~这题秒掉了,总的来说这些天的DP苦修还是有点成果的。哇哈哈哈。做题过程大概是这样的,前几天看了下这题,完全不敢切,果断的没思路。今天再一看,在纸上用笔演练了下,发现基本上能推出公式了。呵呵,蛮好玩的么,DP,虽然只是道水题,但是也说明了我在进步啊~ 哈哈哈#include#include#includeusing namespace std;int min( int a,i

2012-03-12 16:53:51 627

原创 HDU 3499 Flight spfa+dp

自认为相当正确的代码,交上去TLE了。以为是自己的方法错了,从昨晚开始想,到底错哪了?昨晚上看到了熟人的代码,依然大牛。网上的解法大多是正反向最短路+枚举折半边。这样得出。但是我的代码是:用dist[x][0]记录到x点使用折半票的花费,dist[x][1]记录到x点全票的花费。这样dp方程就很容易出来了... 自己想吧。今天下午改了改,发现这题光读入数据就要3600ms++,最终发现是我的s

2012-03-12 15:59:10 690

原创 HDOJ 饭卡 01背包

水题。不过还是让我wa了几次。原来是在于初始化的问题。罢了罢了。想清楚还是很好的。去食堂买菜,最贵的是一定要刷卡的。留着刷吧,然后让其余的尽量接近5块钱就好了。和其他人的代码有点不同... 本质是一样的啦。代价和话费是一样的和那个BIG EVENT AT HDU那题一样。这种解法知道怎么做了。继续切。。。。#include#include#includeusing namespa

2012-03-11 18:48:54 489

原创 HDOJ Robberies 01背包

囧爆了!!! 莫名其妙的就ac了。因为前段时间做了一道类似的题目,大概是出国留学的概率问题。和这题很像。然后凭借记忆把这题给敲了,一交就过了!我勒个去!不带这么玩的!!!果然做题多还是有点点好处的= =。话说题目我都没怎么看懂呢= =DP切不动了。记录一下题意吧:A-I题:acJ题:题意没看懂= =,下次再看= =K题:01背包的第K优解... 雷死哥了!L题:分组背包的变

2012-03-11 16:53:59 524

原创 HDOJ The more, The Better 树形DP

算是树形DP的入门题吧。学习了一下人家的代码过的。在网上看了几种版本。果然还是dfs遍历树好啊。树形结构用指针来建的话可以省去很多麻烦。另外这题不能赤裸裸的从叶子节点更新,因为根是可以选择多个叶子的。没用完一个叶子,就必须把相应的父亲节点更新。还不错的题。#include#include#include#define MAXN 222using namespace std;stru

2012-03-11 15:26:12 478

原创 HDOJ FATE 二维DP

一道很水的二维DP,但是对于DP没有什么感觉的我来说,真是辛苦了。这么来。[疲劳值][怪物数量]=经验值。这样保存的当前疲劳值获取的最大经验者。dp[i][j]=max( dp[i][j],dp[i-m_pl[k]][j-1]+m_exp[k] );当经验值满足升级的条件就可以了。#include#include#includeusing namespace std;in

2012-03-10 19:15:12 553

原创 HDOJ Big Event in HDU 多重背包

第一次遇到这样的题,平分= =,还要回去好好想一下...这么水的... 不懂啊= =#include#include#includeusing namespace std;int main(){ int n,m; int a[101],c[101]; int DP[100001]; while( scanf( "%d %d",&n,&m )!=EOF ) {

2012-03-09 22:55:32 552

空空如也

空空如也

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

TA关注的人

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