使用dp求解包括有:所有可能,极值(最大、最小),能否,0-1背包
dp四个步骤:初始化,边界值,状态方程,结束值。
dp四中题目类型:
1:矩阵
2:序列
3:双序列
4:0-1背包
矩阵解题思路:f[i][j]和前面关系
例如:求矩阵从左上到右下所有路径。f【i】【j】定义为到[i][j]的所有路径,方向确定:f[i][j]=f[i-1][j]+f[i][j-1],返回f[N][M]
求走矩阵从左上到右下的最短路径。方向确定:f[i][j]表示到这点的最短路径.f[i][j]=min(f[i-1][j],f[i][j-1])+nums[i][j];
序列解题思路:f[i]递推式;
题如:最大连续子序列,最大子序列和;,最大子序列回文串等等
例如:最大连续子序列的和。f[i]={
f[i]=f[i-1]+nums[i];f[i-1]>0
f[i]=nums[i];i=0||f[i-1]<0
}
返回最大值
双序列:f[i][j]
提醒:1两个序列的编辑距离,2两个序列最长公共子串,3两个序列最长公共子序列
1、f[i][j]=min{f[i-1][j]+1,f[i][j-1]+1,f[i-1][j-1]+1}a[i]!=b[j].或者f[i-1][j-1]{a[i]=b[j]}
2、f[i][j]=f[i-1][j-1]+1( if a[i]=b[j] else 0)
3、c[i,j]=⎧⎩⎨⎪⎪0c[i−1,j−1]+1max(c[i,j−1],c[i−1,j])i=0 or j=0i,j>0 and xi=yji,j>0 and xi≠yj
背包:i前面i个物品的最大容量j 最大值f[i][j]
f[i][j]=max{f[i-1][j],f[i-1][y-c[i]]+v[i]}