编号(长度)动态规划

题库
a)       最长不下降子序列
以一元组(i)作为状态,表示第i个作为序列的最后一个点的时候的最长序列。于是很容易想到O(n2)得算法。但本题可合理组织状态,引入一个单调的辅助数组,利用单调性二分查找,优化到O(nlogn)。关于优化详见优化章。
一些问题可将数据有序化,转化成本题。
              应用:
拦截导弹(NOIP99 Advance 1) 就是原题。
Beautiful People (sgu199),要将数据有序化:其中一个权作为第一关键字不下降排列,另一个权作为第二关键字不上升。
              Segment (ural 1078),将线段的左端点有序化就可以了。
b)      LCS
状态(i,j),表示第1个字符串的第i位,与第2个字符串的第j位匹配,得到的最长的串。若有多个串要LCS,则加维,即几个串就几个维。我也将此题归入路径问题。
c)      花店橱窗布置(IOI99)
 见路径问题。

准备开始拾起DP的东西,于是从基础开始做起。

最长不降的子序列的o(nlogn)就是增加一个数组,记录长为i的所有序列中最大或者是最小的值,通过二分进行查找,很容易证明该数组是不间断的,递增的数组。

做的题是POJ1631

然后是LCS。。。需要说明一下这道题。POJ2192;开始的时候将它当成简单的LCS,将两个字串与主串匹配,后来出现了问题,其实这道题用简单的搜索就能过,但是既然是在做DP ,就用DP的方式。这个思路很有意思。这是看了别人的想法来领悟的。

这个的主要框架是当a[i]=a[j]的时候dp[i][j]=dp[i-1][j-1];如果不等,则dp[i][j]=max(dp[i][j-1],dp[i-1][j])

最后是路径问题,就是普通的路径就好了。是POJ1157.由于没有要求输出路径于是我就将这一步省略了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值