摘要:   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 阅读(614) 评论(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) 编辑
摘要: http://poj.org/problem?id=1035   方法一:动态规划  O(len^2) EditDist c[i,j]表示s1[0...i]和s2[0...j]的编辑距离,由于矩阵c的第一行和第一列为基准情况,所以实际中c[len1,len2]为s1和s2的编辑距离 当s1[i]==s2[j]时,自然而然的c[i,j] = c[i-1][j-1] 当s1... 阅读全文
posted @ 2010-11-04 21:12 Allen Sun 阅读(581) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1012 共2k个编号,求最小m使得前k次出队的是后k个编号 方法: 1、run1012_1。坏人被kill掉的先后顺序无关紧要,知道下一个踢到的是好人还是坏人就行了。具体见注释 2、run1012_2。由于输入数的范围较小,所以可以打表实现 阅读全文
posted @ 2010-11-04 21:04 Allen Sun 阅读(506) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1001 方法: 大整数乘法 这题没什么好说的,直接用字符串模拟整个过程 阅读全文
posted @ 2010-11-04 19:57 Allen Sun 阅读(463) 评论(0) 推荐(0) 编辑