zoukankan      html  css  js  c++  java
  • 动态规划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那一行的时候,从右边填起,根本不会有影响。

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

     

    代码也更优雅

  • 相关阅读:
    C# 动态创建SQL数据库(一)
    在Winform中菜单动态添加“最近使用文件”
    转(C# 类似右键菜单弹出窗体)
    为什么不能用Abort退出线程
    C# GDI绘制波形图
    转(C# 实现生产者消费者队列)
    为字段设置初始值
    闲话资源管理
    正确使用 new 修饰符
    减少装箱与拆箱
  • 原文地址:https://www.cnblogs.com/weizhibin1996/p/9265355.html
Copyright © 2011-2022 走看看