dp实现关于子序列问题

1.最长上升子序列的长度

dp实现关于子序列问题
代码实现:
dp实现关于子序列问题
状态转移方程:
len(1)=1;
len(k)=max{len(i):1<i<k且ak>ai且k!=1}+1;

2.上升序列的最大和

注意:最长的上升子序列的和不一定是最大
dp实现关于子序列问题
代码实现:
dp实现关于子序列问题
状态方程:
s(1)=a[1];
s(k)=max{s(i):1<i<k且ak>ai且k!=1}+a[k];

3.最长公共子序列的长(两个串)

①最优子结构性质定理:
设序列X={x1,x2,…,xm}和Y={y1,y2,…,yn}的最长公共子序列为Z={z1,z2,…,zk} ,则
(1)若xm=yn,则zk=xm=yn,且zk-1是xm-1和yn-1的最长公共子序列。
(2)若xm≠yn且zk≠xm,则Z是xm-1和Y的最长公共子序列。
(3)若xm≠yn且zk≠yn,则Z是X和yn-1的最长公共子序列。

②状态方程:
dp实现关于子序列问题
dp实现关于子序列问题
代码实现:
dp实现关于子序列问题