摘要:
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... 阅读全文
摘要:
http://poj.org/problem?id=1094 方法: 每加入一条边就进行一次拓扑排序,从而找到符合条件的最少边数 拓扑排序的基本思想就是依次找到图中入度为0的节点,将该节点和其对应的边删除,这样就使得它的邻接节点的入度-1。反复循环这样做直到所有节点都从图中删除(都被编上拓扑编号),或者因为有环所以还剩下某些节点未被删除 Desc... 阅读全文
摘要:
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... 阅读全文
摘要:
http://poj.org/problem?id=1083 方法: 将所有房间号分为200段,即数组path[201],将每次需要移动的起始和目的地之间的所有path[i]都加1 找出path[1...N-1]中最大的一个,即最大的某路段重叠数,就是需要的趟数,再乘以10即得结果 注意点: 1.由于奇偶数分列两边,所以需要将奇偶数房间号做一下变换: ... 阅读全文
摘要:
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)... 阅读全文
摘要:
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 ... 阅读全文
摘要:
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... 阅读全文
摘要:
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... 阅读全文
摘要:
http://poj.org/problem?id=1012
共2k个编号,求最小m使得前k次出队的是后k个编号
方法:
1、run1012_1。坏人被kill掉的先后顺序无关紧要,知道下一个踢到的是好人还是坏人就行了。具体见注释
2、run1012_2。由于输入数的范围较小,所以可以打表实现 阅读全文
摘要:
http://poj.org/problem?id=1001
方法:
大整数乘法
这题没什么好说的,直接用字符串模拟整个过程 阅读全文