• dp总结


    dp总结

    线性dp

    特点:由已知的子问题递推过来,是有方向性的,且有明显的维度。

    求解过程:定义dp -> 确定目标 -> 寻找转移方程 -> 考虑优化(有些题不需要)

    怎么确定转移方程:考虑两种思考方式:1.如何得出一个状态    2.已知这个状态怎么推其它状态

    时间复杂度:直接根据for来乘计算即可

    相关题目:

    1.基础求LIS

    变式1:把一个序列变成非严格递增序列,最少变动的数的个数

    长度-最长不下降子序列长度

    变式2:把一个序列变成严格递增序列,最少变动的数的个数

    长度-最长不下降子序列长度

    但是不是对原序列求最长不下降子序列,而是将a[ i ] - = i 后再求!!!

    原因:不减会导致最后修改成非严格的序列了,减了后保证了严格单增

    2.Making the Grade(POJ3666) 离散化+dp优化

    储存最优值优化:这是在dp中常用的优化。

    适用对象:决策集合只增不减的情况

    优化过程:每次用一个临时变量储存一下最优值 ,更新的时候直接用 ,而不是for一遍寻找当更新完一个dp ,又将最优值更新。

    3.LCIS(最长公共上升子序列)

    重点在于如何定义dp,用储存最优值优化

     

    数位dp:

    其实打好dfs的模板就可以走遍天下了

    时间复杂度:每一种状态只会遍历一次

    套路:求区间满足条件的数的个数:solve(r)-solve(l-1)。写一个solve函数,处理放进来的数,写一个dfs,统计一下方案。

    dfs函数:将一些必须的限制传参,压入dp的维度里。pos记录填到第几位了,lim记录是否压了上界,zero记录是否有前导0(在可以抵消的情况下也可以不考虑)。

    然后根据是否压上界确定枚举这一位数填的范围,最后通过记忆化搜索的记录保证不会重复搜索。

    数位dp总结

    状压dp:

    状压dp入门(模板题+思维题)

  • 相关阅读:
    资产置换
    《CSS3使用指南》读书笔记
    foxtable使用笔记
    Java语法糖
    IO笔记
    HttpClient使用笔记
    正则表达式之?(问号)的使用
    关于HTML代码的转义
    《大数据时代》读书笔记
    《自己动手写网络爬虫》读书笔记
  • 原文地址:https://www.cnblogs.com/mowanying/p/11391374.html
Copyright © 2020-2023  润新知