摘要:   http://poj.org/problem?id=1159 方法1: c[i][j]表示:s[i...j]子字符串中最少需要插入多少个字符形成回文 c[1][n]为最终结果 初始值: c[i][i] = 0 c[i][j] = 0,if i>j 递归式: c[i][j] = c[i+1][j-1],if s[i]==s[j]     ... 阅读全文
posted @ 2010-11-05 16:10 Allen Sun 阅读(1061) 评论(0) 推荐(2) 编辑
摘要:   http://poj.org/problem?id=1157   方法: c[i][j]:一共i束花,j个花瓶时的最大值。 初始化: c[1][1] = a[1][1] c[i][i] = c[i-1][i-1]+a[i][i] 递归式: c[i][j] = max{ c[i][j-1], c[i-1][j-1]+a[i][j] }   Descri... 阅读全文
posted @ 2010-11-05 15:37 Allen Sun 阅读(292) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=1007 求逆序数的方法: 1、此题每个string只有4种字母,所以可以用类似counting sort的方法来以逆序扫描字符串,并以a[1...3]记录相应字符串组的个数,计算每位数与其后面几位的逆序数。复杂度n。但输入若没有限制就不能靠a[1...3]这样做了,那样的话可能每扫描一个字符++的数组位很多,需要判断的分支也很多... 阅读全文
posted @ 2010-11-05 14:36 Allen Sun 阅读(386) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=1141   方法: 对角线方向求解DP。 设c[i][j]表示原串str[i...j]补齐后的最短长度。a[i][j]表示原串str[i...j]补齐后的字符串。 c[1][n]和a[1][n]即为所求结果。n为原串的长度。   初始状态: c[i][i] = 2 a[i][i] = "()&q... 阅读全文
posted @ 2010-11-04 21:43 Allen Sun 阅读(397) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=1094   方法: 每加入一条边就进行一次拓扑排序,从而找到符合条件的最少边数 拓扑排序的基本思想就是依次找到图中入度为0的节点,将该节点和其对应的边删除,这样就使得它的邻接节点的入度-1。反复循环这样做直到所有节点都从图中删除(都被编上拓扑编号),或者因为有环所以还剩下某些节点未被删除   Desc... 阅读全文
posted @ 2010-11-04 21:39 Allen Sun 阅读(321) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=1088 方法: 如果递归式易得,但初始条件以及算法过程不好分析,以至于循环DP不好写的话,则可以采用递归+记忆 的方法实现DP c[i][j]:从(i,j)开始的最长路径 c[i][j] = max{ c[i-1][j], c[i+1][j], c[i][j-1], c[i][j+1] , 0 } +1   Desc... 阅读全文
posted @ 2010-11-04 21:34 Allen Sun 阅读(613) 评论(2) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=1083   方法: 将所有房间号分为200段,即数组path[201],将每次需要移动的起始和目的地之间的所有path[i]都加1 找出path[1...N-1]中最大的一个,即最大的某路段重叠数,就是需要的趟数,再乘以10即得结果 注意点: 1.由于奇偶数分列两边,所以需要将奇偶数房间号做一下变换:  ... 阅读全文
posted @ 2010-11-04 21:29 Allen Sun 阅读(501) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=1062 方法: 枚举+dijkstra 难点在于将问题具体化为求最短路的问题。将每个物品视为编号2~n的节点,编号为1的节点为酋长 的要求,编号为0的节点为旅行家。图中的边(u,v)表示由u到v所需要花费的金钱。所以(0,1)为酋 长的初始要求,(0,2~n)为每个物品本身的价格。若物品v可以用u加上花费c来代替,那么(u,v)... 阅读全文
posted @ 2010-11-04 21:25 Allen Sun 阅读(358) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=1056   方法:Trie树 1、由于编码只由0、1组合,因此Trie的数组分支为2个,即son[2] 2、估计节点数目。已知一个集合中最多有8个序列,每个序列最多有10位。因此最坏情况下共有节点80个。   Description An encoding of a set of symbols ... 阅读全文
posted @ 2010-11-04 21:21 Allen Sun 阅读(408) 评论(0) 推荐(0) 编辑
摘要:   http://poj.org/problem?id=1050 方法:二维转一维 1、使用积累数组cumarr[1...n][1...n],使得求任意块儿子矩阵和的复杂度为O(1),cumarr[i][j]为cumarr[1...i][1...j]子矩阵的和,     通过cumarr[i][j]=cumarr[i-1][j]+cumarr[i][j-1... 阅读全文
posted @ 2010-11-04 21:17 Allen Sun 阅读(489) 评论(0) 推荐(0) 编辑