第五周有点漫长。。题打得有点磨,急躁,自卑等等负面情绪不断出来(ㄒoㄒ)
线段树真难,dp也真难。。如果线段树是有思路实现不了,dp就是完全没思路,核心思想就是找一个转移方程,然而ヽ(´¬`)ノ
寻找dp的转移方程真是一个艰难的过程,同时还伴随着恐怖的状态压缩,也没有什么固定的套路和方法,只能靠多练习和领悟了(?•ω•?)
dp也就是动态规划是针对一类最优解的算法,核心思想是类似分治,把一个问题分解成若干个子问题,通过每一个子问题的最优决策得到最优解(~ ̄▽ ̄)~
dp的实现有递推,也有记忆化搜索,也就是从下至顶,和从顶向下, 也就是递推和递归两种实现方法,具体哪个视题目而定,肯定是哪个简单好实现用哪个?(?????)?
接下来盗用一下,学长ppt里的概念φ(>ω<*)
首先,动态规划是解决多阶段决策过程最优化问题的一种方法(~ ̄▽ ̄)~
然后,把问题分成几个相互联系的有顺序的几个环节,这些环节即称为阶段。︿( ̄︶ ̄)︿
再然后,某一阶段的出发位置称为状态。通常一个阶段包含若干状态。(o?▽?)o
再再然后,决策就是从某阶段的一个状态演变到下一个阶段某状态的选择。ヾ(?∀?ゞ)
再再再然后,由开始到终点的全过程中,由每段决策组成的决策序列称为全过程策略,简称策略。(????)?"""
最后,前一阶段的终点就是后一阶段的起点,前一阶段的决策选择导出了后一阶段的状态,这种关系描述了由i阶段到i+1阶段状态的演变规律,称为状态转移方程。ヾ(??▽?)ノ
动态规划适用的基本条件,具有相同子问题,满足最优子结构,满足无后效性,解决动态规划问题的一般步骤就是ヽ(?∀?)?(?∀?)?
第一步:找到一个原问题,并分析它的子问题,(??∀?)?
第二步:根据原问题和子问题确定状态,ヾ(o´∀`o)?
第三步:确定状态转移方程,ヾ(●´∀`●)
第四步,确定编程实现方式。(?▽?*)
dp问题最经典的还有背包问题,这里挂上dd大佬的背包九讲链接https://blog.csdn.net/ling_du/article/details/41594767大佬牛bi(自行和谐)( ̄3 ̄)a
最后还有就是状态压缩的dp,状态压缩不只是dp,很多类型都有状态压缩,核心思想就是用二进制来优化,只能先挖个坑先了ヽ(´¬`)ノ
啊啊啊,集训就这么结束了,可是感觉自己还是很菜,还是那么贪玩,唉,upupupup(*^o^)人(^o^*)
原文地址:https://www.cnblogs.com/LMCC1108/p/9545490.html