zoukankan      html  css  js  c++  java
  • 0-1背包问题简化。

    看了极客时间里数据结构与算法中0-1背包问题不是很好理解,可能是变量多,也可能是变量名简略原因,所以简化了老师的代码(思想没变),并修改了变量名用c++实现。

    老师源代码:

    public int maxW = Integer.MIN_VALUE; //存储背包中物品总重量的最大值
    // cw表示当前已经装进去的物品的重量和;i表示考察到哪个物品了;
    // w背包重量;items表示每个物品的重量;n表示物品个数
    // 假设背包可承受重量100,物品个数10,物品重量存储在数组a中,那可以这样调用函数:
    // f(0, 0, a, 10, 100)
    public void f(int i, int cw, int[] items, int n, int w) {
    	if (cw == w || i == n) { // cw==w表示装满了;i==n表示已经考察完所有的物品
    		if (cw > maxW) maxW = cw;
    		return;
    	}
    	f(i+1, cw, items, n, w);
    	if (cw + items[i] <= w) {// 已经超过可以背包承受的重量的时候,就不要再装了
    		f(i+1,cw + items[i], items, n, w);
    	}
    }
    

    我的代码:

     1 // cw表示当前已经装进去的物品的重量和;i表示考察到哪个物品了;
     2 // 假设背包可承受重量100,物品个数10,物品重量存储在数组a中,那可以这样调用函数:f(0, 0)
     3 int nCurWeight = 0;                //当前存储背包中物品总重量
     4 int BagWeightMax = 100;            //背包能承受的总重量
     5 const int nTotalItemCount = 10;    //道具总个数
     6 int items[nTotalItemCount] = {1,5,2,21,4,51,2,55,112,32};    //每个道具重量
     7 void f(int i, int cw) {
     8     if (cw == BagWeightMax || i == nTotalItemCount) { // cw==BagWeightMax表示装满了;i==n表示已经考察完所有的物品
     9         if (cw > nCurWeight) 
    10             nCurWeight = cw;
    11         return;
    12     }
    13     f(i+1, cw);
    14     if (cw + items[i] <= BagWeightMax) {
    15         // 已经超过可以背包承受的重量的时候,就不要再装了,减枝法
    16         f(i+1,cw + items[i]);
    17     }
    18 }
    修改后的
  • 相关阅读:
    Sublime Text 3 3126 注册码
    修改bootstrap 的全局样式,bootstrap 3.0 是由html5和CSS 3组成的
    mysql-sql高级应用
    MySQL 主键冲突,无法插入数据
    jquery加载页面的方法(页面加载完成就执行)
    Jquery怎么获取select选中项 自定义属性的值
    使用Yii2中dropdownlist实现地区三级联动的例子
    Yii2中省市三级联动(栏目联动)
    [HNOI2009] 梦幻布丁
    [CJOJ2410]数列操作d
  • 原文地址:https://www.cnblogs.com/workharder/p/12154734.html
Copyright © 2011-2022 走看看