0-1背包问题

  • 题目描述

有 n 件物品, 每件物品有一个价值和一个重量,分别记为: b1,b2, …bn w1,w2, …wn 其中所有的 重量wi 均为整数。 现有一个背包,其最大载重量为W,要求从这n件物品中任取若干件(这些物品要么被装入要么被留下)。问背包中装入哪些物品可使得所装物品的价值和最大?

  • 输入

第1行:2个整数n(1<=n<=1000)和W(1<=W<=10000),分别表示物品的件数和背包的最大载重量。

第2-n+1行:每行2个用空格分开的整数,第i+1行的整数表示第i件物品的重量wi和价值bi(1<=bi,wi<=10000)。

  • 输出

第1行:1个整数,表示背包所能装下的物品的最大总价值。

第2-?行:每行3个用空格分开的整数,i, wi, bi,分别表示最优解中的物品的编号、重量和价值。

  • 样例输入
4 5
2 3
3 4
4 5
5 6
  • 样例输出
7
1 2 3
2 3 4
  • 题目分析
这道题是背包问题的其中一种,除此之外还有部分背包问题、完全背包问题、多重背包问题等,我就不一一介绍了。所谓0-1背包问题,0就是指不要此件物品,1就是指要这件物品,也就是说你不能像部分背包问题那样把物品分开。而且每种物品只有一件,不可以像完全背包问题、多重背包问题那样有很多件。这道题还在原来的基础上要求了输出物品序号,对生活中的我们都更加实用。话不多说,下面是代码:
#include<cstdio>
#include<iostream>
using namespace std;
int N,W,b[1002],w[1002],f[1002][10002];
void wxy(int i,int j)
{if(!i) return ;if(w[i]>j||f[i-1][j]>=f[i-1][j-w[i]]+b[i])wxy(i-1,j);else{wxy(i-1,j-w[i]);cout<<i<<" "<<w[i]<<" "<<b[i]<<endl;}
}
int main()
{cin>>N>>W;for(int i=1;i<=N;i++)cin>>w[i]>>b[i];for(int i=1;i<=N;i++)for(int j=1;j<=W;j++){if(w[i]>j)f[i][j]=f[i-1][j];elsef[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+b[i]);}cout<<f[N][W]<<endl;wxy(N,W);
}

C++动态规划算法之0-1背包问题相关推荐

  1. Java使用动态规划算法思想解决01背包问题

    Java使用动态规划算法思想解决背包问题 背包问题是一种组合优化的NP完全问题.问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高 动 ...

  2. 算法:动态规划算法的最佳实践-背包问题

    1.背包问题 有一个背包,容量为4磅,现有如下物品 要求达到的目标为装入的背包的总价值最大 并且重量不超出要求装入的物品不能重复 2.思路分析 背包问题主要是指一个给定容量的背包.若干具有一定价值和重 ...

  3. 动态规划算法问题分析_背包问题_求相隔数据之间最大和_算法理解

    动态规划如何选取一维数组还是二维数组 总结: * 当题目种涉及到两个变量时需要借助二维数组来实现动态规划,例如 背包问题中,涉及容量和重量两个变量,则需要两个维度来考虑 * 当题目中只有一个变量时,使 ...

  4. 野生前端的数据结构练习(11)动态规划算法

    [摘要] dynamic programming被认为是一种与递归相反的技术,递归是从顶部开始分解,通过解决掉所有分解出的问题来解决整个问题,而动态规划是从问题底部开始,解决了小问题后合并为整体的解决 ...

  5. 动态规划算法据序偶原理求解0/1背包问题(C++实现)

    可程序根据序偶原理,应用动态规划算法求解. Code   1//说明:本程序有一定代码冗余,若分割为多个函数的形式会使程序简洁明了.   2#include <iostream>   3u ...

  6. 算法设计与分析第4章 动态规划(一)【背包问题】

    第3章动态规划(一)[背包问题] 基本思想: 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,但是经分解得到的子问题往往不是互相独立的.不同子问题的数目常常只有多项式量级.在用 ...

  7. 动态规划算法-03背包问题

    背包问题 简介 背包问题一个很著名的动态规划问题,也称为0-1背包问题,很多题都是以此为模板进行魔改的. 问题描述 有N个重量为w1,w2,w3,,,wn且价值为v1,v2,v3,,,vn的物品和一个 ...

  8. 详解:动态规划算法【Java实现】——背包问题

    动态规划 动态规划算法介绍 动态规划算法最佳实践-背包问题 思路分析: 图解分析: ​Java代码实现: 动态规划算法介绍 1)动态规划(Dynamic Programming)算法的核心思想是:将大 ...

  9. 完全背包问题贪心算法c语言,数据结构与算法学习之路:背包问题的贪心算法和动态规划算法...

    一.背包问题描述: 有N种物品和一个重量为M的背包,第i种物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包重量,且价值总和最大. 二.解决方法: 1.贪心算 ...

  10. 总结——01背包问题 (动态规划算法)

    0-1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi . 问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大? 分析一波,面对每个物品,我 ...

最新文章

  1. 一看就懂!【英雄联盟锐雯】与 Python 详解设计模式之门面模式
  2. idea 端口被占用
  3. Java教程 实战学习Struts实例
  4. POJ - 2942 Knights of the Round Table (双连通分量)
  5. 斯坦福大学机器学习第二课 “单变量线性回归”
  6. django18:auth模块
  7. css 奇淫技巧 行内快 父级padding 子级margin 抵消
  8. vcneter5.5添加域用户权限
  9. LDMS 8.8 简明使用手册之客户端配置及部署
  10. python学习系列--str类型
  11. 事物(二)之客户端事务应答匹配
  12. mac上安装mongoDb以及简单使用
  13. netperf工具的使用
  14. python: 校园网登录脚本
  15. ionic代码压缩与代码混淆
  16. u盘为什么显示在工具栏而不显示在计算机里,为什么U盘插入后任务栏上显示在我的电脑上不显示...
  17. 视觉点胶机系统相机、镜头参数与选择
  18. WPF ScrollViewer 仿苹果 细长 滚动条
  19. 今日杂谈---重用和程序员
  20. 2003服务器安全策略

热门文章

  1. BZOJ4920: [Lydsy1706月赛]薄饼切割
  2. 在线查看Axure的rp文件用这个免费工具!
  3. 解决ubuntu安装后进入系统时黑屏,左上角闪动光标(ubuntu20亲测有效,应该是解释最详细的一篇了)
  4. 蓝桥杯历届试题-蚂蚁感冒
  5. Handdle AI在芯片字符瑕疵识别检测中的应用
  6. 使用HTML版制作个人简历制作,非常好看的模板!!!
  7. Java大数据方向学习路径导航
  8. 达人评测 骁龙898参数
  9. 微信公众号(服务号)接入开发(2)之微信授权登陆
  10. Java_持久层_MyBatis