Peter算法小课堂—经典线性DP问题(下)

大家好,我是Peter,我又来啦🎈🎄✨

🎈🧨🎉《动态规划》专栏来啦,目前为止,此专栏已经有两篇文章啦🎁🎀🎄

1.DP概念与编程方法    DP概念和编程方法-CSDN博客

2.Peter算法小课堂—经典线性DP问题(上)Peter算法小课堂—经典线性DP问题(上)-CSDN博客

矩阵链乘法

背景知识

先了解背景知识(线性代数是大学学的,没学过线性代数的看看就过):

(1)矩阵乘法:如果矩阵A和矩阵B相乘,那么A的列数等于B行数。设A为m行n列,B为n行u 列,则AB为m行u列(m*u),矩阵乘法AB需要做mnu次乘法运算

(2)矩阵乘法的结合律:(AB)C=A(BC)。括号体现了计算顺序

(3)括号位置不同:矩阵乘法需要的乘法操作次数不同,以矩阵ABC举例

A为m*n,B为n*u,C为u*v

(AB)C,乘法次数为m*n*u+m*u*v

A(BC),乘法次数为m*n*v+n*u*v

两者的差为|m*n*(u-v)+u*v*(m-n)|,它可能是一个巨大的值。如果能知道那个括号方案最优,就能大大减少工作量。

下面给出矩阵链乘法的定义:给定一个数组p[],其中p[i-1]*p[i]表示矩阵Ai的尺寸,输出最少的乘法数。

例如p[]={40,20,30,10,30},它代表4个矩阵,尺寸分别为40*20、20*30、30*10、10*30。四个矩阵相乘,当括号方案为(A(BC))D,有最少次数26000

这是一个典型的区间DP。

算法思路

根据结合律,可以把它分成两个子区间[i,k]和[k+1,j],分别链乘。

然而,必定有一个k,使得乘法次数最少,那么,这个状态转移方程就解出来了

dp[i][j]=0  i=j

dp[i][j]=min{dp[i][k]+dp[k+1][j]+pi-1*pk*pj}  i<=k<j

LIS

定义状态dp[i]表示第i个数为结尾的最长递增子序列,那么有

dp[i]=max{dp[j]}+1

LCS

(1) xi=yi   dp[i][j]=dp[i-1][j-1]+1

(2) xi!=yi  dp[i][j]=max(dp[i][j-1],dp[i-1][j])

🎈🎄✨希望大家能有所收获,有问题的话可以评论。🎈🎄✨

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值