题目大意:
给出了N个串。问最多有多少个串组成的序列,是可以由上一个串通过左右两边加字符构成的。
思路分析:
在trie上的dp
在建立自动机的时候,得到fail的同时,用dp记录这个串作为最后一个串所可以得到的最多的满足要求的串的数量。
那么 dp[i] = max(dp[i在trie上的的父亲节点],dp[i的fail节点] )+ 以i节点结尾的单词的数量,注意不是以i字符结...
题目大意:n个矩形,将一个大矩形分成 n+1 块。矩形之间不重合,可是包括。求这n+1个矩形的面积思路分析:用线段树记录他们之间的父子关系。然后dfs 计算面积。当给出的矩形上边的时候,就要记录到该矩形的父亲去。#include #include #include #include #define ...
分类:
其他好文 时间:
2014-08-28 22:38:26
阅读次数:
357
题目大意:
在n个数中选取k个数,是他们的按位与最小。
思路分析:
开始往dp想,但是这道题是不满足子问题的。
当前的值最小,但是丢掉了和后面的1错开的最多的状态。
暴搜的剪枝:
1.与后面所有的树相与都比ans小,剪掉,因为越与越小。
2.先将所有的数排序,先取小的。
3.ans可以不断更新,不需要达到k的时候更新,原因和1相同。
#include
#incl...
分类:
其他好文 时间:
2014-08-27 16:33:38
阅读次数:
158
题目大意:
给出来n条64base的病毒编码序列。
再给出m条模式串,让你反编码之后求出里面包含多少病毒序列。
思路分析:
很裸的AC自动机了。但是各种恶心。
动态开trie 静态开queue 就会RE。
全部动态开辟就会MLE。
各种姿势之后静态开trie 动态开queue才能AC。
#include
#include
#include
#include
...
分类:
其他好文 时间:
2014-08-27 14:49:28
阅读次数:
232
题目大意:16*16的数独。思路分析:多说无益.想说的就是dancing links 的行是依照第一行第一列填 1第一行第二列填 2……第一行第十五列填15第一行第二列填 1……第二行。。。。列的纺织则是第一行放1,第一行放2,。。第十六行放16.。。第一列放1.。第一列放2.。。第十六列放16.。...
分类:
其他好文 时间:
2014-08-23 12:33:30
阅读次数:
264
题目大意:
就是要求树的重心,重心的定义就是删除这个点使得森林尽量平衡。
也可以让分治子树的时候使得每颗子树的数量在nlogn以内。
思路分析:
son [x] 表示x的子树的数量 不包括自己。
balance 表示最大的森林的节点数。
最后我们要让最大的balance 最小。
balance = max (balance ,n - 1 - son[x] , son[j]...
分类:
其他好文 时间:
2014-08-23 01:11:09
阅读次数:
205
题目大意:
对一颗树上进行路径加减,然后询问单点的值。
思路分析:
简单的树链剖分模板题。
#include
#include
#include
#include
#pragma comment(linker,"/STACk:10240000,10240000")
#define maxn 50005
#define lson num<<1,s,mid
#define rs...
分类:
其他好文 时间:
2014-08-20 22:43:03
阅读次数:
292
题目大意:
关于网络阻塞命令延迟的处理。
命令就分为三种对栈的处理。
但是如果接收到一个操作,它后面的操作都要先取消不做,再做这个操作,再做之前取消了的操作。
思路分析:
题目也就转化成了,给出一个时间t接收到peak操作,找到第一个最大的 l ,使得 sum[l - t] > 0...
然后的问题我们就是如何确定最大的l。
我们记录sum的同时再记录一个右边最大。
然后我...
分类:
其他好文 时间:
2014-08-20 18:08:22
阅读次数:
202
题目大意:
给出一棵树,求出从起点开始走m长度最后回到起点,所能得到的宝藏的最大价值。
思路分析:
通过一次dfs可以得到的是子树到根节点的所有距离的最大值。
现在的问题就是他走完一颗子树可以去另外一颗子树。
所以在回溯到根的时候要统计其他子树上互补距离的最大值。
dp[i] [j] 表示i为根节点,在i的子树中走j步然后回到i所能拿到的最大价值。
转移方程就是
d...
分类:
其他好文 时间:
2014-08-19 10:59:44
阅读次数:
250
题目大意:
求出树上距离为k的点对有多少个。
思路分析:
dp[i][j] 表示 i 的子树中和 i 的距离为 j 的点数有多少个。注意dp[i] [0] 永远是1的。
然后在处理完一颗子树后,就把自身的dp 更新。
更新之前更新答案。
如果这颗子树到 i 有 x 个距离为j的。那么答案就要加上 dp[i] [ k-j-1] * x;
#include
#inclu...
分类:
其他好文 时间:
2014-08-18 20:32:02
阅读次数:
176