摘要: 问题描述:已知人名构成的父子关系树(或者森林),对于给定的两个人名name1和name2,求其最近公共祖先。题目保证人名不重复。分析:当数据量不是很大询问不是很多的时候,利用C++ STL中的map和set容器可以很方便的实现。用map容器存储父子关系。对于每一个询问,先将从name1开始到树根的路... 阅读全文
posted @ 2015-02-20 17:21 __brthls 阅读(460) 评论(0) 推荐(0) 编辑
摘要: 问题描述:有一棵树,树上节点编号1~n,其中节点1为根节点,树上的每个节点有其对应的一个价值。现在要减掉一些枝桠,只留下m个节点的一棵树(必须包含根节点),为这m个节点着色,约束条件是要使剩下m个节点的价值之和最大化。算法思路:状态定义:dp[x][j]表示以节点x为根的子树中,着色节点数目为j时,... 阅读全文
posted @ 2015-02-20 16:15 __brthls 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 问题分析:树中的路径,即是从树上的某个节点起,经过某个转折节点,到达另一个节点这样一条路径。而最长路径就是要找出这些路径中最长的那一条。算法思路:对于每个节点,记录下以该节点为根节点的子树中从该节点开始到所有叶子节点的路径中最长的那一条路径长度d1以及次长的那一条路径长度d2(最长和次长两条路径无公... 阅读全文
posted @ 2015-02-20 13:05 __brthls 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 由先序遍历和中序遍历序列可唯一还原出二叉树,前提条件是所有节点的关键字无重复。分析:设post_order(pre, in)表示先序序列为pre,中序序列为in的二叉树的后序序列。根据后序序列的定义可知:post_order(pre, in) = 左子树的后序序列+右子树的后序序列+root;根据先... 阅读全文
posted @ 2015-02-18 11:35 __brthls 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 题目描述:编号为0~n-1的n个位置上分别有价值为w[0]~w[n-1]的n个物品,现在要选出一些物品,使得获得的价值最大,约束条件是:任意连续的m个物品中选取的物品数量不超过q。其中nq, 那么由s不可能转移出任何有效状态.2.如果bitcnt(s)>1, 有转移方程:dp[i+1][ns] = ... 阅读全文
posted @ 2015-02-17 22:20 __brthls 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 完全背包问题跟01背包问题的区别在于:对每种物品,在01背包中可以选取0个或者1个,而在完全背包中,每种物品都可以选取任意多个。状态定义:dp[i][j]表示:解决了第0~i中物品的选取问题,已消耗容量为j时,获得的最大价值。状态转移:这里的状态转移有两种写法,第一种写法较容易理解,第二中写法理解起... 阅读全文
posted @ 2015-02-17 17:55 __brthls 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 01背包描述的是这样一个问题:有一个容量为m的背包,有n个物品,第i个物品的重量为w[i], 价值为v[i]。现在要往背包中装这些物品,使得最后所获得的总价值最大。状态定义:dp[i][j]表示:解决了第0~i个物品的选取问题后,背包已消耗容量为j时,所获得的最大价值。状态转移:dp[i][j] =... 阅读全文
posted @ 2015-02-17 16:00 __brthls 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 数字三角形是一个典型的DP问题。下面是分别采用记忆化bfs和DP的代码:采用记忆化bfs: 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 #define MAXN 201 8 9 int pr... 阅读全文
posted @ 2015-02-17 15:00 __brthls 阅读(133) 评论(0) 推荐(0) 编辑
摘要: trie图用于解决多模式匹配问题。设有N个长度不超过L的模式串,匹配串长为M,那么用trie图解决多模式匹配问题的复杂度为O(N*L+M).思路:trie图的基础是trie树。1.用trie树实现多模式匹配 首先建立N个模式串的trie树。设匹配串为s,我们枚举匹配起始位置i,在trie树中依次去... 阅读全文
posted @ 2015-02-17 13:29 __brthls 阅读(179) 评论(0) 推荐(0) 编辑
摘要: KMP算法是字符串模式匹配的一种经典算法。设原串为s[],模式串为p[]。1. 朴素的算法枚举匹配起始位置 i(s中),从起始位置 i 开始,与模式串中的字符逐次一一对比,直到匹配成功或者匹配失败, 然后++i,如此循环直到遍历完原串s。2. KMP算法2.1 出发点 对于某次匹配,如果第一个字符... 阅读全文
posted @ 2015-02-07 23:09 __brthls 阅读(205) 评论(0) 推荐(0) 编辑