zoukankan      html  css  js  c++  java
  • 完全背包问题

    完全背包的话  就是说每一个背包都有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;

  • 相关阅读:
    [CTF]ROT5/13/18/47位移密码
    [CTF]维吉尼亚密码(维基利亚密码)
    [CTF]ACSII码
    kxtj2-1009驱动总结
    DC/DCLT1767EMS8E-5芯片
    485通信总结
    安装pymssql报错
    安装mysqlclient报错
    ERROR 1878
    Win10安装gopls
  • 原文地址:https://www.cnblogs.com/mltang/p/8720254.html
Copyright © 2011-2022 走看看