• 01背包的优化问题


    通过不断的去模拟代码的运行 对背包问题有了更深的理解 sum[i][j]=max(sum[i-1][j],sum[i-1][j-x[i]]+v[i]); 实际上就是数据的不断更新过程 在上一子问题的基础上 对该子问题每个空间大小能放的最多价值进行更新 然后使用于下一个子问题  由于每个子问题都是最优解 最终得到的解就是最优解

    下午的背包刚入手 用的是二维数组 有一定程度的浪费空间
    对于一个子问题的每个空间对应的最佳价值 可以通过从高位到地位逆序的写法(下一个子问题求每个空间大小的最佳价值要使用的是上一个子问题此时的空间大小以及小于此时空间大小的最佳值) 采用逆序的写法 即照顾了只需要上一个子问题状态不被覆盖 有起到了节省空间的作用
    附上代码
    for(int i=1;i<=n;i++)
                {
                    for(int j=v;j>=weight[i];j--)
                    {
                        f[j]=max(f[j],f[j-weight[i]]+value[i]);
                    }
                }
    v为背包空间

  • 相关阅读:
    werfault进程使用CPU率高
    oracel 拆分字符串
    TCP TIME WAIT
    netstat 命令
    Java 理论与实践: 并发集合类
    DIV与SPAN之间有什么区别
    oracle超出打开游标的最大数的原因和解决方案
    Quartz表达式
    Axis创建webservice客户端和服务端
    Web服务cxf框架发布2
  • 原文地址:https://www.cnblogs.com/z1141000271/p/5260112.html
Copyright © 2020-2023  润新知