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循环,从哪里开始循环)

周三四五这几天写题不是很勤,对于不是经典算法的题,自己想的话能想出来大概的思路,但数组怎么开有时候就差一点就想出来,没能想全面各个量的设置,总之经验不足。自己想题虽然很耗时间,但是这是检验自己思维的过程,能知道自己具体差在哪里,但无奈短板太多,不好弥补。和之前比起来的话,感觉水平略微有所稍稍提升,能感受到审题、解题的门道,也感受到自己思维方式的变化,确实和以前不一样了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值