自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

u010152669的专栏

基础(数据结构和算法知识+编程技术)+良好的心理素质(沉稳+爆发力)+悟性(在扎实的基础上的灵感和悟顿)

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

原创 coderforces 335B--Palindrome [字符串好题]

给出一个字符串s(长度小于50000),从中找出一个长度不超过100但尽可能长的回文子串(这里的子串不一定要连续的),任意输出一个即可。codeforces的题目都有标签,这题不例外有个DP,便一开始就往这方面想。首先回文一定要左右“对称”,那么如果做动态规划,那么必须左右同时进行。一开始想记f(i,j)为i到j这个区间的最长回文串,但就是空间就已经超了。看到题目中找的最长只是100,能不能记其他

2014-04-06 13:05:08 735

原创 1D/1D动态规划优化初步 模型一

今天看了一篇很不错的文章——《1D/1D动态规划优化初步》,其中的模型一我觉得十分常见和实用,就拿“玩具装箱”这题做了一下。这题的确很经典,做过不少动态规划的题目都见过这个模型。根据文章的介绍,能够用这种优化的,需要满足决策单调性。设w(x)为f(x)所枚举的最优决策是多少,所谓的决策单调性需要满足:当i 有了这个,如果只是单纯地在枚举时的i从w(x-1)到x-1,这必然作用不大,不能起到实际效果

2014-04-06 13:05:06 2043

原创 poj 1738--石子合并 [GarsiaWachs算法]

石子合并算是一道比较经典的题目了,这里讨论一下朴素的动态规划和GarsiaWachs算法。最简单的就区间动态规划了。设f(i, j)(i (需要枚举一个p)以区间长度为阶段,时间复杂度为三次方的。一个对决策的优化,可以把转移优化为O(1)的。设g(i, j)为f(i, j)枚举的决策最优的p,那么显然有:这样子枚举的p的范围就大大缩小了,p的取值范围是比较小的,只有一两个左右。然而,该算法的时间和

2014-04-06 13:05:01 1285

原创 AC自动机的失败指针树

AC自动机在询问时都要沿着失败指针走一遍,这是非常耗时的,从而可以把每个结点沿失败指针走一次的结果保存下来,那么就能省不少时间。 如图,是已经建立好的AC自动机,点1是根,紫色的是失败指针。若匹配到点7,需要沿着7->2->1把所有的单词数量加起来。如果事先就把结果sum放在点7,就可以省时了。那么当某些点的单词数量发生变化时,假设点2的单词数量加1,那么点2,6,7的sum都要加1,这还是比较慢

2014-04-06 13:04:57 1502

原创 土地购买 [DP斜率优化]

经典的题目,土地购买:Farmer John需要买下n(≤50000)块长方形的土地,每块的花费就是长宽之积(就是面积)。他可以一次买多块土地,价格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换。问Farmer John在合理分组购买土地下,最少需要的花费。首先,如果一块土地被另一土地包含(比如5*10的土地包含4*6的土地),那么这块土地就不用考虑了,从数据中去掉。然后按土地的宽度排序

2014-04-06 13:04:47 1003

原创 poj 1236--Network of Schools [强连通分量]

#include #include #include using namespace std;const int N = 107;int n;bool edge[N][N];void Init(){    scanf("%d\n", &n);    for (int i = 0; i  n; i ++)    {        int t;        scanf("%d", &t);     

2014-04-06 13:04:36 491

原创 图的探索 强连通分量的相关概念

在了解这个前,先得明确一下定义:割点(也作“关节点”):如果在图G中去掉一个顶点(自然同时去掉与该顶点相关联的所有边)后图的连通分支数增加,则称该顶点为G的割点。割边(也作“桥”、"关节边"):假设有连通图G,e是其中一条边,如果G去掉(删去)e后是不连通的,则边e是图G的一条割边。强连通图:有向图 G=(V,E) 中,若对于V中任意两个不同的顶点 x 和 y ,都存在从x 到 y 以及从 y 到

2014-04-06 13:04:33 691

原创 ioi 2005--河流 [左儿子右兄弟]

有一棵树(结点数≤100),在根有一个伐木场,每个结点都有若干木头,每条边都有个距离,所有的木头都要往上运,运过一条边的代价为木头数量乘以边的长度。现在可以在某些结点新建k(≤100)个伐木场,建立伐木场后,木头就不一定要运到根了,可以直接运到新的伐木场。问在合理建设伐木场下,最小的代价是多少。这很容易想到树形的动态规划,设f(i, j)为这以i为根的子树新建j个伐木场的最小代价。可是如何转移呢?

2014-04-06 13:04:31 1182

原创 poj 1273--Drainage Ditches [网络流dinic算法]

#include #include #include using namespace std;const int N = 207;const int M = 207;int n, m, nedge;int from[N], to[M  1], next[M  1], cap[M  1];int pre[N];void Insert(int a, int b, int c){    to[nedge

2014-04-06 13:04:24 556

原创 GDKOI 2012--mmm含树

这是今年GDKOI的一题:有一棵树,开始时所有结点的值都是0。有多个操作,每个操作有两种:1.对某个点增加w,设dis(i,j)为点i到点j的最短距离,那么某个结点增加w时,对于任意一个结点j,它的值会增加w + dis(i,j)。2.询问某点的值。w可以忽略,因为整棵树都要加上w,只要记下所有w的和就可以了,输出答案时再加上。这题的突破口就是只需要求一个点的值,这就取决于其他发生变化的点对该点的

2014-04-06 13:04:19 631

原创 spoj 375--Query On a Tree [树链剖分]

贴个qtree的代码:#include #include using namespace std;// 读入优化inline int getInt(){    int res = 0;    char ch;    for (ch = '#'; ch  '0' || ch > '9'; ch = getchar());    for (; ch >= '0' && ch  '9'; ch = ge

2014-04-06 13:04:17 477

原创 探究 树链剖分

链可以看做是一种特殊的树,当一棵树退化成了链,某些问题就变得容易解决,也有很多数据结构支持这样那样的操作,线段树就是其中一种。从而我们可以想象,能否把一棵树也分成很多条链,从而来解决一些问题呢?这就有了树链剖分。形象点说,树链剖分就是把一棵树分成多条链(称为“重链”),链与链之间有一些边相连,当操作在链上时,可以用线段树来维护,但在链与链之间的边(称为“轻边”,也叫“轻链”)就需要直接维护。在重链

2014-04-06 13:04:14 567

原创 放象棋 矩阵中的DP题

题目的意思很简单:在n * m的矩阵中放置若干个炮(可以不放),使得没有一个炮可以攻击另外一个炮。炮的攻击方式和中国象棋的一样,中间只要有一个棋子就能打到对面。答案mod 9999973。这个题目一开始我想得很接近了,但没想到用DP,觉得是组合数学。首先可以把问题转化一下:没有一列或一行有两个以上的炮,这样炮于炮之间就不能攻击了。也就是说,每行或每列,要么不放炮,要么放一个或两个,有三种可能。又因

2014-04-06 13:04:11 650

空空如也

空空如也

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

TA关注的人

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