贪心算法求解背包问题

素颜马尾好姑娘i 2022-07-15 10:13 326阅读 0赞

问题:给定n个物品和一个容量为C的背包,物品i的重量为w 其价值为v。背包问题就是如何如何选择背包的物品,使装入背包中的物品的总价值是最大的,注意和0/1背包问题的区别,在背包问题中可以将某种物品的一部分装入背包,不可以重复装入。但是在0/1背包问题中,只有装入或者不装入两种结果。

  1. #include<iostream>
  2. using namespace std;
  3. int KanpSack(int w[],int v[],int C) {
  4. double x[10] = {0};
  5. int maxValue = 0;
  6. int i = 0;
  7. do {
  8. x[i] = 1;
  9. maxValue+=v[i];
  10. C = C-w[i];
  11. i++;
  12. } while(w[i]<C);
  13. // for(int i =0 ; w[i]<C;i++){
  14. // x[i] = 1;
  15. // maxValue+=v[i];
  16. // C =C-w[i];
  17. // }
  18. x[i] = (double)C/w[i];
  19. maxValue+=x[i]*w[i];
  20. return maxValue;
  21. }
  22. int main() {
  23. int arrayw[10]= {9,8,7,6,5,4,3,2,1,0};
  24. int arrayv[10]= {9,8,7,6,5,4,3,2,1,0};
  25. int cw = 60;
  26. int rel = KanpSack(arrayw,arrayv,cw);
  27. cout<<"这个背包的价值是:"<<rel<<endl;
  28. return 0;
  29. }

这个代码简单的实现了背包问题的结果可以尽可能多的增加了背包的价值,从某种意义上讲,从最简单的方面实现了背包问题。首先满足价值和重量的递减排序,其次我们看到背包容量的大小就是60。其实所有的方法都可以在这个代码的基础之上加以修改,举个例子,当用户自己输入一组数据的时候由于是乱序的所以,我们可以利用一个简单的排序算法实现对用户输入的排序

发表评论

表情:
评论列表 (有 0 条评论,326人围观)

还没有评论,来说两句吧...

相关阅读

    相关 贪心算法求解背包问题

    贪心算法,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 。 解题的一般步骤是: 1.建立数学模型

    相关 部分背包问题贪心算法

    题目描述:有一个背包,容量为 c,同时有若干物品,价值各不相同,重量也各不相同。我们需要选择一部分物品装入背包,要保证在不超过背包容量的前提下是的装入背包中的物品的总价值最大。

    相关 Java描述贪心算法解决背包问题

    思路: 首先将物品根据性价比排好序在一个集合里,性价比=价格/重量... 然后根据性价比从大到小依次依次放入背包,如果没办法放入这个物品的全部,就放入一部分,如果可以放入全量

    相关 贪心算法背包问题)NYOJ-106

    贪心算法 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法不是对所有问