• 动态规划4背包问题


    贪心算法。

    1、先放入价值最大的。这个肯定不行

    2、放入平均价值最大的,也不行

     

     

    二维数组作为记忆化搜索

    第一行,只有0这个物品的时候,对应容量的最大值

    第二行,考虑0和1两件物品的时候

    第三行,0,1,2都考虑

    (1,2)这个点

    对1考虑放入1,对0考虑容量为0的时候,对应的大小。两个加起来和6比较

    对于第三行来数

    2,0 肯定是0,因为没有容量

    2,1 此时只能放入价值为6的物品

    2,2的时候,参考上面的最大值,因为容量是2,还不能考虑自身(容量3)

    对于2,3

    第一种是不考虑自身,那么最大值就是上面的16

    第二张是考虑自身,把自己放进去刚好占满,价值是12,以及加上(1,0)【这种是0和1都考虑之后,容量为0的情况】

    所以取两者最大值16

     

    大前提:每个物品只能选一次

    动态规划

    空间复杂度的优化

    交替使用

     上面永远是i为偶数,下面永远是i为奇数

    i只需%2即可

    空间可以大很多很多

    其实一行空间也可以

    观察到每次只需要使用左边和上边的元素,根本不会碰到右边。

    当现在要填1那一行的时候,从右边填起,根本不会有影响。

    上一行的内容,就是自己。左边的内容,就是左边。

     

    代码也更优雅

  • 相关阅读:
    哪种写法更好?<script></script> vs/or <script type=”text/javasript”></script>
    JS 脚本应该放在页面哪个位置 head body foot
    List<T> ForEach break
    嵌套JSON 取出name与value
    C# 改变图片尺寸(压缩),Image Resize
    tornado
    appachebench网站压力测试
    mysql分区分表
    redis的持久化存储,RDB与AOF
    MEMCACHE的内存管理和删除策略
  • 原文地址:https://www.cnblogs.com/weizhibin1996/p/9265355.html
Copyright © 2020-2023  润新知