当前位置:   article > 正文

动态规划解二维多重背包问题_二维背包问题动态规划详解

二维背包问题动态规划详解

问题 
二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[i]。

  1. #include <iostream>
  2. using namespace std ;
  3. const int V = 1000 ; //总成本b
  4. const int U = 1000 ; //总成本a
  5. const int T = 5 ; //物品的种类
  6. int f[U+1][V+1] ; //可以不装满
  7. int w[T] = {8 , 10 , 4 , 5 , 5}; //价值
  8. int a[T] = {600 , 400 , 200 , 200 , 300}; //每一个的体积
  9. int b[T] = {800 , 400 , 200 , 200 , 300};
  10. const int INF = -66536 ;
  11. int package()
  12. {
  13. for(int i = 1 ; i <= U ;i++) //条件编译,表示背包可以不存储满
  14. for(int j = 1 ; j <= V ;j++)
  15. f[i][j] = INF ;
  16. f[0][0] = 0 ; //01
  17. for(int i = 0 ; i < T ; i++)
  18. {
  19. for(int u = U ; u >= a[i] ;u--) //必须全部从V递减到0
  20. {
  21. for(int v = V ; v >= b[i] ;v--)
  22. f[u][v] = max(f[u-a[i]][v-b[i]] + w[i] , f[u][v]) ; //此f[v]实质上是表示的是i-1次之前的值。
  23. }
  24. }
  25. return f[U][V] ;
  26. }
  27. int main()
  28. {
  29. int temp = package() ;
  30. cout<<temp<<endl ;
  31. system("pause") ;
  32. return 0 ;
  33. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/466294
推荐阅读
相关标签
  

闽ICP备14008679号