4月10日总结
Posted 偶尔爆零的蒟蒻
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4月10日总结相关的知识,希望对你有一定的参考价值。
总结
动态规划的理解:
核心:状态转移方程
一旦列出标准的正确的状态转移方程,每一个子问题都可以对应方程的参数变化来递推求解,问题也就攻破一半了。但有些非经典问题的状态方程不好想,动态规划的难点之一就在这里。
大概的理解
正向递推:每一时刻都选择一个最好的过去,来决定当前时刻。
逆向递推:每一时刻都选择一个最好的未来,来决定当前时刻。
数据结构:
动态规划设置的数组,它的维度和下标都是有意义的(代表某一阶段状态的含义)。这个意义取决于你对求解问题过程的理解和思路,前提是思路能解出来,否则就算有意义也没有用。
有时候数组开不了那么大,就需要把状态压缩,有点像最小闭覆盖的思想,用最少的状态来表示每一个阶段的变化。比如滚动数组,第二维度只开成2可选择利用&1运算,只分成两个不同状态,轮流使用。操作性较高,好像不能每个题都能用。
感受
对于某些题的分类:
裸题,裸算法:。。。
初步变形题,设置一个问题场景,读完后被它的问题场景迷惑,仔细分析后,才能抓住它的本质,比如M题(一打眼一个数学求和公式,以为用到什么数学知识,刚开始没思路,尝试一发模拟然后TLE,又觉得像是前缀和改了改样例没过就没交,当天晚上顿悟,想到是双序列最大子段和O(n)就过了)反恐训练那个也是…
迷惑思路题:
不要被题意描述受限制,比如贪心的钓鱼问题,虽然说是单向路线,但是计算方式和现实是完全不一样的,但结果相等,(难在抽象出模型,转换计算方式来求解)这类问题要小心,十分迷惑人的思路。(和之前的color a tree)一样。在动态规划里,还没遇见过,可能体现在正向还是逆向递推上等等。
做动态规划题难在找状态转移方程,和递归题难在找怎么递归的方法 很像,但效率比递归高。
1、数组下标取什么意义(对于某些情况数组大概取两个维度,一个时间维度,一个空间维度,时间类比阶段,空间类比状态,一个阶段有多个状态,从中取最优,大概是这么回事)
2、一般形式 :DP[ i ]( [ j ] )=DP[ i-m ]( [ j-n ] )+ c
往前跳几个然后加上某个数,如果多个状态就取最值。
3、初始化dp数组—按顺序填表(这里有很多细节,比如几重for循环,从哪里开始循环)
周三四五这几天写题不是很勤,对于不是经典算法的题,自己想的话能想出来大概的思路,但数组怎么开有时候就差一点就想出来,没能想全面各个量的设置,总之经验不足。自己想题虽然很耗时间,但是这是检验自己思维的过程,能知道自己具体差在哪里,但无奈短板太多,不好弥补。和之前比起来的话,感觉水平略微有所稍稍提升,能感受到审题、解题的门道,也感受到自己思维方式的变化,确实和以前不一样了。
以上是关于4月10日总结的主要内容,如果未能解决你的问题,请参考以下文章