zoukankan      html  css  js  c++  java
  • 动态规划01背包记录

    01背包是动态规划的一种类型其主要的形式是:

       1、所有类型物品每种类型只有一个

       2、一次只能取一个且物品不能分割

       3、只有取或者不取(所以叫01背包,就是只有这两种情况)

       4、在背包容量不满的前提下尽可能多的装入最大价值的物品

          设背包的容量为V,第i个物品的重量为weigh[i]对应的价值为price[i];  设容量为j(j的最大值为背包的容量)的背包所能装的最大价值为dp[j]

    n为所有的物品个数,我们先从第1个数据开始,则此物品重量为weigh[1],则我们将所有大于weigh[1]的背包都放入第1个物品(即从dp[V]到

    dp[weigh[1]])此时所有的大于weigh[1]重量的背包都装入第一个物品。

          接下来我们装入第2个物品,此时同样我们要对所有的容量大于weigh[2]的背包都装入第二个物品,但是由于装第一个物品时一些背包已经装入

    了第一件物品,怎么办呢?分以下几种情况

     1、如果在装入第一件物品后容量不足以装入第二件物品且第一件物品的价值大于第二件则不装入第二件

     2、如果在装入第一件物品后剩余容量不足以装入第二件物品且第一件物品的价值不如第二件的大则将第二件物品装入取出第一件(当然在程序

         中可以直接覆盖当做取出第一件物品)

     3、如果装入第一件物品后容量任然足以装下第二件物品,则将两件物品一同装入背包中

    代码实现:

    for(i=0;i<n;i++)
    {
    	for(j=V;j>=weigh[i];j--)//将所有重量大于weigh[i]的背包装入物品 
    	{
    		dp[j]=max(dp[j],dp[j-weigh[i]]+price[i]);
    	}
    } 
    

    以此类推  

    大神勿喷

  • 相关阅读:
    wordPress屏蔽中国境内的IP
    中国IP地址大全
    WebGL之点精灵的旋转(Rotation Sprite)
    WebGL之点上添加图片(using texture on point)
    potree--加载二进制格式文件
    potree--如何控制八叉树子节点的显示?
    重启tomcat后,访问登陆接口响应慢--Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [27,572] milliseconds.
    Unirest
    配置规范
    函数编写建议
  • 原文地址:https://www.cnblogs.com/tonghao/p/4609191.html
Copyright © 2011-2022 走看看