dp基础之坐标型Max Square

问题:给定一个全是0或1的网格,求一块全由1组成的最大的正方形的面积 例: A = [[0,1,1,1,0],     [0,1,1,1,1],     [1,1,1,1,0],     [0,0,1,0,0]] 输出:9(边长是3) 设:f[i][j]是以A[i][j]为右下角的最大的全1正方...

2018-12-25 13:12:55

阅读数 36

评论数 0

dp基础之难点解析K Edit Distance

重要的是先说三遍:先看Edit Distance,先看Edit Distance,先看Edit Distance! 本文是加强版K Edit Distance:给定N个字符串A,问哪些字符串和Target的最小编辑距离不大于K. 编辑操作和上面一样:增加(插入)、删、替换 例: 输入:A = ...

2018-12-23 21:14:15

阅读数 123

评论数 0

dp基础之难点解析K Sum

问题:给定数组A,包含n个互不相等的正整数,问有多少种方式从中找出K个数,使得和为arget 例: A = [1,2,3,4].K = 2,Target = 5 输出:2(1,4;2,3) 问题分析: 考虑最后一步A[n-1]是否选入这K个数     case1:A[n-1]不选入,则需要在前n...

2018-12-20 13:38:24

阅读数 52

评论数 0

dp基础之难点解析Minimum Adjustment Cost

问题:给定数组A,每个元素是不超过100的正整数,将A中每个元素修改,使得变成数组B,要求是 数组B中任意两个相邻元素之间的差不超过Target,求最小的修改代价,即|A[0]-B[0]|+...+|A[n-1]_B[n-1]|的最小值 例: A = [1,4,2,3],Target = 1 输出...

2018-12-20 13:10:53

阅读数 40

评论数 0

dp基础之Ones and Zeroes

问题:给定t个01字符串S[0],...,S[t-1],现有m个0,n个1,问最多能组成多少个给定字符串,每个字符串最多组成一次。 例: 输入: S = ["10","0001","111001&qu...

2018-12-04 13:16:15

阅读数 37

评论数 0

dp基础之双序列型regular expression match && wildcad match

问题:给定两个字符A,B,B是一个正则表达式,里面可能含有"."、"*",请问A是否和B匹配?(True/False) "."可以匹配前面的任何一个字符,"*&qu...

2018-12-03 21:22:30

阅读数 33

评论数 0

dp基础之双序列型子串出现次数

问题:给定A[0,...,m-1],B[0,...,n-1],问B在A中出现几次(可以不连续) 例: A = ['r','a','b','b','b','i','t'] B = ['r','a','b','i','t'] 输出:3 问题分析:可以用类似于最长公共子串的思路。问B在A中出现的次数,...

2018-12-03 19:30:42

阅读数 35

评论数 0

dp之空间优化理解

有关之前空间优化用了滚动数组的方法(如果可以优化的话),其实最好空间的复杂度是min{O(m),O(n)},本质上是矩阵计算时的变化情况,即按行计算还是按列计算的问题,空间优化的本质也在于此,只要弄清楚了计算过程的变化情况,一般情况下就解决空间优化的问题。...

2018-11-28 16:32:10

阅读数 84

评论数 0

dp基础之双序列型最短编辑距离Edit Distance

问题:给定连个字符串A、B,要求把A变成B,可以进行如下操作,问最少的操作次数可以使A变成B,即最小编辑距离? 操作:增加(插入)、删、替换 例: A = ['m','a','r','t'],B = ['k','a','r','m','a'] 输出:3(m换成k,t换成m,加上a) 问题分析:设...

2018-11-28 16:25:50

阅读数 37

评论数 0

dp基础之双序列型交错形成字符串

问题:给定三个字符串A,B,X,判断X是否是由A,B的字符交错而形成(True/False) 例:A = ['a','a','b','c','c'],B = ['d','b','b','a','c'] X = ["a","a"...

2018-11-27 11:38:48

阅读数 32

评论数 0

dp基础之双序列型最长公共子串

问题:给定两个字符串A,B,找到两个字符互传的公共最长子串的长度。 子串:在原字符串上去去掉某些字符后形成的字符串,不改变字符之间的顺序 例: A = ['j', 'i', 'u', 'z', 'h', 'a', 'n', 'g'] B = ['l', 'i', 'j', 'i', 'a', 'n...

2018-11-25 22:23:44

阅读数 37

评论数 0

dp基础之区间型炸气球

问题:有N个气球A[1],...A[N],扎破第i个气球所得的金币A[left]*A[i]*A[right],扎破气球i后, 气球left和right就变成相邻的气球,求获得最多的金币数,A[0] = A[N+1] = 1 例: A = [3,1,5,8] [3,5,8]--&gt...

2018-11-25 01:57:32

阅读数 36

评论数 0

dp基础之区间型scramble string

问题:给定一个字符串S,按照树的结构每次二分左右两个部分,直至到单个字符,在树的某个节点交换左右儿子,可以形成新的字符串,判断一个字符串T是否经过这样的变换而成。 例: S = 'grate',T = 'rgtae' S = ['g','r','a','t','e'] ,T = ['r','g',...

2018-11-24 21:27:43

阅读数 595

评论数 0

dp基础之博弈型和区间型结合轮流取数字

问题:给定一个序列A[0],..,A[N-1],两个人轮流从序列两头取数字(每次只取一个),双方都用最优策略,使自己的取到的数字和尽量比对手大。 问先手是否必胜?当和一样大时规定先手胜。(True/False) 例: A = [1,5,233,7] 输出:True(,先手取1,无论后手取哪个,先手...

2018-11-24 17:07:08

阅读数 131

评论数 0

dp基础之区间型最长回文子串

区间型dp:一般是给定一个字符串或者序列,对其进行一些操作,最后一步将它去头或者去尾,剩下会是一个区间 [ i , j ],状态定义就是f[i][j],表示子序列[i,j]具有的最优性质。 问题一:给定一个字符串序列,找出其最长的子回文串序列的长度。 例: 输入:S = ['b','b','b'...

2018-11-23 23:39:28

阅读数 57

评论数 0

dp基础之背包问题小结

可行性背包问题:最多能装多少重量,需要记录前 i 个物品能不能拼出重量W(w=0...Target),如dp基础之背包问题里的问题一,用f[i][w]表示前i个物品能不能拼出重量w,f[i][w] = True/False   计数型背包问题:有多少种方式拼出重量,如dp基础之背包问题里的问题...

2018-11-23 16:27:11

阅读数 25

评论数 0

dp基础之背包问题

问题一:有N个物品,重量为A[0]...A[N-1],有一个容量为M(M是一个正整数)。 问:最多能带走多重的物品。 例:A = [2,3,5,7] M = 10 输出:10(2,3,5) 问题分析: 要求N个物品能否拼出重量W(W = 0,1...M),需要知道前N-1个物品能否拼出重量W...

2018-11-19 21:31:50

阅读数 60

评论数 0

dp基础之博弈型取石子

对于博弈型dp,一般是从复杂走向简单,故不从最后一步开始分析,反而从第一部开始分析 问题:一排N个硬币,两人先后从最右边取一个或两个硬币,规定取走最后石子的人为胜。 问先手是否必胜(先手必胜:True;先手必败:False) 例: N = 5 输出:True,先手必胜,第一个人先取两个石子,...

2018-11-19 17:38:41

阅读数 58

评论数 0

dp基础之划分型小结

问题:一般时要求将一个序列或字符串划分成若干段并且满足一定的要求 分析:从最优策略的最后一步开始,枚举最后一段的起点。 如果题目不指定段数,则直接用f[i]表示前i个元素分段后的性质/最值,个数:完全平方数或者方式数:回文问题。 如果题目指定了段数,用f[i][j]表示前i个元素段分成j段的...

2018-11-19 17:28:51

阅读数 69

评论数 0

dp基础之划分型抄写书的最短时间

问题:有N本书需要抄写,每本书的页数分别为A[0]...A[N-1],现有K个抄写员。每个抄写员可以连续抄写若干本书,每个抄写员的抄写速度一样一分钟一页,问最少需要多长时间抄写完所有的书。 例: A = [3,2,4],K = 2 最少时间为:5 分析:若一个抄写员抄写A[i...j],需要...

2018-11-18 13:47:41

阅读数 55

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭