acm第七周学习总结

学习体会:
这个周结束了线性dp的学习,开了一节课的区间dp,我想谈谈我对线性dp得理解。
线性dp大多数都能分解成一个子问题,用子问题的解来,解决问题。对于子问题我们确定它的一个状态,可以列出状态转移方程,列状态转移方程的时候要注意初始值和边界问题。此外,动态规划是求最优解,也就对全部子问题的解进行枚举,比较而得到最优解,因为枚举了所有子问题的解,所以会导致时间和空间的复杂度变高,因此我们可以用滚动数组优化空间,用记忆化搜索来优化时间。通过做线性dp的作业题我认为题目基本是几个经典例题的延伸。
有最长公共子序列
一个序列,如果是两个或多个已知序列的子序列,且是所有子序列中最长的,则为最长公共子序列。
通过二维数组保存每段LCS的长度,则状态转移方程为:
if(a[i]==b[j])
dp[i+1][j+1]=dp[i][j]+1;
else
dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);

最长上升子序列
一个序列,求它的最长上升子序列的长度
dp[i]代表以a[i]结尾的LIS的长度则状态转移方程为:
dp[i]=max(dp[i], dp[j]+1) (0<=j< i, a[j]< a[i])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值