• 完全背包问题


    完全背包的话  就是说每一个背包都有n个可以放进

    for(i=1;i<=row;i++)
        {
            for(j=1;j<=col;j++)
            {
                int temp = j/w[i];
                for(int k = 1; k <= w[i]; ++k)    //最多能装下多少个i物品  依次判断
                {
                    dp[i][j] = max(dp[i][j],dp[i-1][j-w[i]*k] + k*w[i]);
                }
            }
        }

    这个复杂度比较高

    我们进行了优化

    递归方程可以写成  dp[i][j] = max(dp[i][j],dp[i][j-w[i]] + v[i]);

    优化的方法:

    1、dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]] + v[i],dp[i-1][j-2*w[i]]+2*v[i],...........)

    2、dp[i][j-w[i]] = max(dp[i-1][j-w[i], dp[ i-1 ][ j-w[i]-w[i] ] + v[i])

    3、dp[i][j] = max(dp[i-1][j],dp[i][j-w[i]],........)   //2式替换1式中的前两项

    同理后面接着写

     

     

    其实还是画图好理解:

    复杂度O(vn)  

    这个图好像也能解答下面的东西。

    初始化的细节问题:

    有的问题中有要求“恰好装满背包”,有的则没有要求,这就在初始化DP数组时有所不同。

    恰好装满背包:则初始化时,DP[0]=0, 其他的DP[1…..V]均设为负的无穷大。

    无须恰好装满背包:则初始化时,DP[1…..V]全部设为0;

  • 相关阅读:
    linux解压 tar命令
    kernel部分数据结构列表二(超级块)
    Linux QQ 的安装
    怎么把uclinux下载到EPCS中
    CentOS 5 上安装git
    【转】Linux下使用Evolution收发Email
    几个采样代码的对比
    NIOS II 安装uclinux的硬件要求
    S3C2440 Timer初始化方法
    基于NIOS II的液晶显示设计——ucGUI移植
  • 原文地址:https://www.cnblogs.com/mltang/p/8720254.html
Copyright © 2020-2023  润新知