C++回溯法解决背包问题源码演示

工作之余,把代码过程常用的内容做个备份,下面代码段是关于C++回溯法解决背包问题演示的代码,应该对各位有较大好处。

#include<iostream>

#include<algorithm>

using namespace std;

class Knapsack{

public:

  p = pp;

  w = ww;

  n = nn;

  c = cc;

  cw = 0;

  cp = 0;

  bestp = 0;

  x = new int[n];

  cx = new int[n];

}

void knapsack(){

  backtrack(0);

}

if(i > n){

    if(cp > bestp){

      bestp = cp;

      for(int i = 0; i < n; i++)

x[i] = cx[i];

    }

    return;

}

  cw += w[i];

  cp += p[i];

  cx[i] = 1;

  backtrack(i+1);

  cw -= w[i];

  cp -= p[i];

}

cx[i] = 0;

}

void printResult(){

  cout << "可以装入的最大价值为:" << bestp << endl;

  cout << "装入的物品依次为:";

  for(int i = 0; i < n; i++){

    if(x[i] == 1)

cout << i+1 << " ";

  }

  cout << endl;

}

private:

  int n;

  double c;

};

int main(){

  double p[4] = {9,10,7,4},w[4] = {3,5,2,1};

    Knapsack ks = Knapsack(p,w,4,7);

    ks.knapsack();

  ks.printResult();

  return 0;

}

                               

                       

               

               

           

           

               

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • (1)0-1背包容量为10的背包,有5种物品,每种物品只有一个,其重量分别为5,4,3,2,1,其价值分别为1,2...
    梦晨宝儿阅读 724评论 0 0
  • 假设有n件物品,每件物品都有各自的重量和价值,现在给一个最多可以装v重量的背包,请问如何装才能使价值最大。 用动态...
    jianpengma阅读 538评论 0 0
  • public class Loading { static int n;//货箱数目 static int[] w...
    梦中清影寒阅读 1,979评论 0 1
  • 数据格式详解 输入输出函数详解 字符串处理函数详解 内存函数详解 类详解 数据格式详解 2^8=256(同样是一个...
    我在东北玩泥巴_阅读 2,274评论 0 0
  • 喜爱值最大 第一行:输入总金钱money,商品数量n 此后的n行:(每行代表一个商品,数值分别代表,商品价格、商品...
    左家垅一哥阅读 372评论 0 0

友情链接更多精彩内容