题目大意:
给出了N个串。问最多有多少个串组成的序列,是可以由上一个串通过左右两边加字符构成的。
思路分析:
在trie上的dp
在建立自动机的时候,得到fail的同时,用dp记录这个串作为最后一个串所可以得到的最多的满足要求的串的数量。
那么 dp[i] = max(dp[i在trie上的的父亲节点],dp[i的fail节点] )+ 以i节点结尾的单词的数量,注意不是以i字符结...
hdu1011 和 hdu1561类似,给定每个节点的花费以及价值,并且子节点必须在父亲节点取到以后才可以被取到相当于是在树上进行的01背包dp时考虑每一个子树 root和它的每一个儿子,状态转移方程为dp[root][j]=max(dp[root][j],dp[root][j-k]+dp[ son...
分类:
其他好文 时间:
2014-08-26 00:16:55
阅读次数:
236
http://acm.hdu.edu.cn/showproblem.php?pid=1255
一道挺简单的题,让我折腾了许久。主要卡在了更新节点后维护父亲节点上。后来思路明确了就很容易了。
节点信息:
l,r:区间端点
cnt:区间被覆盖的次数,cnt = 0说明没有被完全覆盖。
len1:区间被覆盖的长度
len2:区间至少被两条线段覆盖的长度。
只要找到父亲节点与...
分类:
其他好文 时间:
2014-08-16 19:49:51
阅读次数:
218
Up函数 用来更新父亲节点的值void push(int w){ sum[w] = sum[2*w]+sum[2*w+1];//更新节点值}单点更新 先找出第p个数 然后更新他的值void add(int p,int d,int l,int r,int w){ if(l==r) ...
分类:
其他好文 时间:
2014-08-08 23:47:46
阅读次数:
277
/************************************************************************* root 根节点的 父亲节点 设为NULL ...
分类:
其他好文 时间:
2014-08-02 18:14:23
阅读次数:
267
这里的思路是 在每一次的找父亲节点的时候我们把每一个孩子的父亲的改成他的祖先。因为有可能一个孩子的关系很复杂可能就是一条链,这样查找就没浪费时间。//这是简单的递归实现find (int x){ while(x!=father[x]) father[x] = find(father[x]) ; r....
分类:
其他好文 时间:
2014-07-31 09:38:15
阅读次数:
205
bool is_left( int n )//是否为左节点{ return n % 2 == 0;}bool is_right( int n )//是否为右节点{ return 0 != n && ! is_left( n );}int father( int n )//父亲节点{ if ( ...
分类:
其他好文 时间:
2014-07-29 13:42:48
阅读次数:
182
第一次dfs求出每个点的最大和次大长度,由下向上更新第二次由上向下更新。第二次dfs是为了处理某个点,最大长度不是向子节点延伸的长度,而是从父亲节点过来的 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include ...
分类:
其他好文 时间:
2014-07-19 18:31:43
阅读次数:
243
顾名思义每个节点一个为儿子指针,一个为兄弟指针(在加个父亲)这样就避免了儿子个数不均带来的问题TOJ TOJ4077用一个指针记录当前在哪个节点,需要注意的是可以有多个重名的文件,但是不能在一个目录下。所以用文件名和其父亲节点作为一个文件的id(区分其他)。#include #include #.....
分类:
其他好文 时间:
2014-07-19 15:36:52
阅读次数:
1298
【来源】题目2 : 树【分析】依据输入情况建立起树的模型。树的表示是一个表明父亲节点的数组。核心算法有两个:计算某一节点的深度。用循环实现,一直向上找父亲节点,直到找到根节点。计算循环的次数即为深度。计算某一节点的全部子节点。用递归实现。本题在实现上节点的命名从0至N-1,与题目描写叙述不同。【代码...
分类:
其他好文 时间:
2014-07-18 19:10:31
阅读次数:
199