自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 后缀数组之细节问题理解

之前发过一篇关于后缀数组的东西,但是不够详细,注释足够详细,但是究其原理可能还是会有所不懂,因此我把我的学习过程讲述一下,首先肯定是要学习基数排序,这个我之前在别人的博客上看到一个例子感觉非常不错,自己也用这个例子反复模拟了很久,其实原理并不难,也很容易懂,但是千万要注意自己一定要手推一遍,不然一下细节问题在你自己默写代码的时候很容易暴露出来。这里给出我学习基数排序的代码(大家可以利用输出中间结果的

2016-08-31 21:25:02 240

原创 后缀数组模板(详细理解)

后缀数组 后缀数组看了很久了,从基数排序开始看一只看到height数组的实现也理解了很多东西,不过别人的东西再多也不是自己的,因此自己重新总结了一下,顺便学一个后缀数组的模板备用,这里以SPOJ 694为例。#include <ctime>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>

2016-08-29 20:14:12 387

原创 POJ 1185 炮兵阵地(经典状态压缩dp)

题目分析 与上一道状态压缩题很想,但是动态规划的状态有不同,这道题跟四周的2行有关,不只是一行了,因此对于这种问题如果还是采用上一中的状态,那么因为跟上2行有关,那么我们会发现这样无法写出状态转移方程,因此需要把上面2个状态合并在一起,这样才能正确的写出状态转移方程。dp[i][j][k]表示在第i行状态为k上一行的状态为j的能放的最大炮兵数量。#include <cstdio>#inclu

2016-08-22 15:22:50 318

原创 POJ 3254 Corn Fields(状态压缩dp)

题目分析 状态压缩通常用来处理那些状态很多导致不能容易表达出来,于是需要通过压缩状态进行表示,又利用比如位运算处理一些东西,很容易将结果求出来。我的第一道状态压缩题,注释写的很详细。#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namesp

2016-08-22 09:31:46 301

原创 HDU 5867 Water problem

题目分析 水题,很明显我们需要首先求出1到1000用字母表示需要多少字母,然后利用前缀和的思想累加即可,注意此题说的是字母,千万不要把-算进去了,我就算进去了,雪崩!!#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn

2016-08-21 20:44:03 341

原创 HDU 5726 GCD

题目分析 这道题时间给的比较长,但是处理不好很容易超时,自己刚拿到这道题只觉得求一段区间的gcd好求,但是问有多少个跟该区间的gcd一样,这个我感觉不怎么好处理,然后看了网上的做法,打ST表,这个很简单,就是一个动态规划,不理解的可以学一下,很简单的,第一步处理完之后很多需要处理,刚开始我是这样想的,处理出给定的区间的gcd之后,然后利用gcd的性质(选定一个点作为左端点,再不断枚举右端点会发现

2016-08-21 17:02:11 383

原创 博弈论习题集(由易到难)

博弈论习题集(由易到难) 在做题目之前如果一点也不懂还需要看一下博弈论的基础知识三大基础博弈HDU 1846 Brave Game#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long LL;int read(){

2016-08-20 20:19:01 2722

原创 BestCoder Round #86

1001 Price List#include <cstdio>#include <vector>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 100005;typedef long long LL;vector <int> vec;int m

2016-08-08 10:47:29 285

原创 BestCoder Round #65

HDU 5590 ZYB’s Biology (水题)#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 105;char s1[maxn],s2[maxn];int main(){ int T,N; sc

2016-08-06 15:05:24 251

原创 HDU 5148 Cities

题目分析 非常好的一道题,这道题同样是求树上的期望问题,也就是每个边被使用的次数乘以 每个边的权值,再除以K*K/2(因为这道题可能会抽到相同的点)因为最后还需要乘以K*K那么这样一化简很明显就是最终得到的结果乘以2就可以了,对于每条边而要,如果左选中n个顶点,右边选中m个顶点,那么很明显,这条边所做的贡献为n*m次。我们对于dp[i][j]表示以i为根节点的子树中选取j个顶点得到的最小的期望值

2016-08-05 17:16:39 329

原创 HDU 5723 Abandoned country

题目分析 题目不难,但是注意的点比较多,首先就是写最小生成树算法,这个很简单,我也不用多说了,我要说的就是求期望的问题,我们可以这样求,对于每条边来说,它用到的次数等于这条边左边节点数乘以右边节点数,其实就是乘法原理。然后我们将用到的次数再乘以这条边的权值其实就是这条边对期望所做的贡献,那么在递归的工程中我们可以求出这个值,然后再将这个值除以n*(n-1)/2就可以得到期望了。#include

2016-08-05 14:37:47 374

原创 HDU 3586 Information Disturbing

题目分析 这道题wa了不知道多少次,状态转移方程非常好写,但是调bug调了一上午。首先我将程序中的INF设置的过大,导致了加的过程中爆INT,这个潜伏的bug找了好几个小时,真是蠢!!这道题主要思想是利用2分的思想,对于power limit进行2分搜索即可,同时需要注意有可能找不到值,那么需要特判输出-1.最初的时候忘了还有可能有这种情况了,别的就比较简单了,看了一下,这道题时那场多校比赛中可

2016-08-05 11:10:10 328

原创 HDU 2196 Computer(树形DP)

题目分析 这道题好难想呀!!看了别人的题解继续想还是想不明白,主要是自己的一个点没有过来,题解是先求出每个节点到叶子节点的最长路以及次长路用dp[u][0]和dp[u][1]表示,然后再用一遍dfs求每个节点到经过其父亲节点出发的另一条最长路,状态转移方程是这样的,如果这个节点在其父亲节点的最长路上,那么这个节点经过其父亲节点的最长路我们用dp[son][2]表示,则dp[u][2]=max(d

2016-08-04 20:10:52 240

原创 hdu 5783 Divide the Sequence

题目分析 一道水题,本来我以为n*logn的方法会爆炸,但是一看时间给了2500MS,于是果断搞起了,首先我们在边求前缀和的同时进行操作,然后直接将每一个的结果通过二分查找找到给定元素在数列中的位置,然后替换该位置的元素,同时将长度重新设置为此时查找到的长度,因为如果有负数会使前面若干个必须与该负数组合在一起。这样一来求得的长度就是应该求得到最多分成几个子序列的个数。同事需要注意这道题会爆INT

2016-08-04 16:12:09 195

原创 HDU 5787 K-wolf Number

题目分析 多校的题目,状态比较好想,但是真的不好写,需要用一些比较巧妙的方法。这道题是数位dp,对于题目要求,我们需要定义的状态时,第一维表示当前处理的数的位数,后面的4维表示当前数字的前4位数,接下来表示当目前为止所有数字位上的数字是否满足K-wolf Number,最后一维肯定还是是否有限制了。对于这道题处理上的小技巧就是:1:当你处理前几位的时候,他们前面是没有数字的,因此我们将他们前面的

2016-08-04 13:05:52 485

原创 POJ 1655 Balancing Act

题目分析 本题就是求每个节点的最小balance,如果有多个节点有相同的balance,那么输出最小的一个。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 2e4+5;const int INF = 0x3f3

2016-08-03 16:37:27 292

原创 POJ 1947 Rebuilding roads

POJ 1947 Rebuilding roads 树形dp经典题目,没做过此类题,想了好半天,用到了分组背包的思想,注释写的很清楚,因此就不多讲了。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 155;co

2016-08-03 16:12:03 369

原创 树形dp基础题

树形dp基础题 该dp的实质就是利用树的性质,儿子节点返回的值可以被父亲节点加以利用以及处理,这样就构成了一种在树结构上的动态规划,简称树形dp。从昨天开始决定刷树形dp专题,刷了4道水题,因此想写一个博客总结一下。POJ 1463 Strategic game 这道题就是在树上的节点添加守卫,很明显我们可以得出以下结论,如果父亲节点不添加守卫,那么儿子节点一定要添加守卫,如果父亲节点添加

2016-08-03 14:31:14 444

空空如也

空空如也

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

TA关注的人

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