0-1背包问题解决代码,腾讯的试题中,只需将物品的价值与物品的重量取一样的值即可。

PackProblemClass.h:

// PackProblemClass.h: interface for the PackProblemClass class.
//
//#if !defined(AFX_PACKPROBLEMCLASS_H__60EB89B2_4A0F_4085_8973_AC42DE6842E5__INCLUDED_)
#define AFX_PACKPROBLEMCLASS_H__60EB89B2_4A0F_4085_8973_AC42DE6842E5__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000class PackProblemClass
{
public:int S;//背包的容量为Sint N;//物品的件数为Nint *w;//物品的重量 N维数组int *v;//物品的价值 N维数组int *x;//背包装的物品价值最大时对应的物品种类 N维数组 x[i]=1表示第i个物品在背包中int V;//背包能装下的最大价值void DynamicProgramming();//进行动态规划,计算最大价值V,和对应的物品组合xvoid ResultOutput();//将动态规划结果输出PackProblemClass(int iS,int iN,int *iw,int *iv);//构造函数virtual ~PackProblemClass();//析构函数};#endif // !defined(AFX_PACKPROBLEMCLASS_H__60EB89B2_4A0F_4085_8973_AC42DE6842E5__INCLUDED_)

PackProblemClass.cpp:

// PackProblemClass.cpp: implementation of the PackProblemClass class.
//
//#include "stdafx.h"
#include "PackProblemClass.h"
#include <iostream>using namespace std;//
// Construction/Destruction
//
//背包问题类
PackProblemClass::PackProblemClass(int iS,int iN,int *iw,int *iv)
{this->S = iS;//背包的容量为Sthis->N = iN;//物品的件数为Nthis->w = iw;//物品的重量 N维数组this->v = iv;//物品的价值 N维数组this->V = 0;//背包能装下的最大价值this->x = new int[N];//背包装的物品价值最大时对应的物品种类 N维数组 x[i]=1表示第i个物品在背包中for(int i=0;i<N;i++)//初始化x{x[i] = 0;}
}void PackProblemClass::DynamicProgramming()//进行动态规划,计算最大价值V,和对应的物品组合x
{int temp_S = S + 1;int i,j; //动态定义并初始化二维数组int **c;c = new int*[N+1];for(i=0;i<=N;i++){c[i] = new int[temp_S];}for(i=0;i<=N;i++){for(j=0;j<=S;j++){c[i][j] = 0;}}////根据公式c[i][j]=MAX{c[i-1][j],c[i-1][j-w[i-1]+v[i-1]]}计算c[][]for(i=1;i<=N;i++){for(j=1;j<=S;j++){if (j>=w[i-1]) {if (c[i-1][j]<(c[i-1][j-w[i-1]]+v[i-1])) {c[i][j] = c[i-1][j-w[i-1]]+v[i-1];}else{c[i][j] = c[i-1][j];}}else{c[i][j] = c[i-1][j];}}}//输出c[][]for(i=0;i<=N;i++){for(j=0;j<=S;j++){cout<<c[i][j]<<"  ";}cout<<endl;}///逆推法计算最大值V时对应的物品组合xV = c[N][S];temp_S = S;for(i=N;i>0;i--){if (c[i][temp_S]>c[i-1][temp_S]) {x[i-1] = 1;temp_S = temp_S - w[i-1];}}}void PackProblemClass::ResultOutput()//将动态规划结果输出
{cout<<"背包的容量:"<<S<<endl;cout<<"物品的件数:"<<N<<endl;cout<<"物品的重量:"<<endl;int i;for(i=0;i<N;i++)cout<<w[i]<<" "<<endl;cout<<endl;cout<<"物品的价值:"<<endl;for(i=0;i<N;i++)cout<<v[i]<<" "<<endl;cout<<endl;cout<<"动态规划的结果为:"<<endl;cout<<"背包所能装下的物品的最大价值为:"<<V<<endl;cout<<"物品的种类:"<<endl;for(i=0;i<N;i++)cout<<x[i]<<" "<<w[i]<<" "<<v[i]<<endl;cout<<endl;}PackProblemClass::~PackProblemClass()
{}

转载于:https://www.cnblogs.com/finalsatan/p/4057058.html

背包问题学习笔记(二)相关推荐

  1. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  2. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

  3. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  4. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  5. Scapy学习笔记二

    Scapy学习笔记二 Scapy Sniffer的用法: http://blog.csdn.net/qwertyupoiuytr/article/details/54670489 Scapy Snif ...

  6. Ethernet/IP 学习笔记二

    Ethernet/IP 学习笔记二 原文链接:http://wiki.mbalib.com/wiki/Ethernet/IP 1.通信模式 不同于源/目的通信模式,EtherNet/IP 采用生产/消 ...

  7. Java学习笔记二:数据类型

    Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...

  8. 吴恩达《机器学习》学习笔记二——单变量线性回归

    吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...

  9. ASP.NET MVC 2 学习笔记二: 表单的灵活提交

    ASP.NET MVC 2 学习笔记二:  表单的灵活提交 前面说到有做到公司内部的一个请假系统,用的是ASP.NET MVC 2+Entity Framework.虽然EF(Entity Frame ...

  10. amazeui学习笔记二(进阶开发4)--JavaScript规范Rules

    amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...

最新文章

  1. HDOJ 3642 Get The Treasury(扫描线 + 线段树 + 离散化 立方体的并)
  2. linux中pthread_kill函数详解
  3. 心理医生给女人的忠告
  4. mysql 5.5数据库主从配置步骤详解
  5. 让目标检测和实例分割互相帮助,地平线实习生论文被AAAI 2020收录
  6. VMware ESXi 6.X Syslog日志配置
  7. 一个快速排序写了快 10000 字?
  8. 前端生成小程序二维码
  9. kettle官方使用文档地址
  10. 关于结构体、类、联合体、位域等所占内存大小计算
  11. 用什么词典可以翻译php,PHP调用有道词典翻译API实现通译功能及代码
  12. 在Markdown编辑器中输入上标下标
  13. javax.servlet.ServletException: Could not resolve view with name 'destination/isOtherExist' in servl
  14. day11【网络编程】
  15. LaTeX--简易教程--论文写作神器
  16. GOPS 2021 上海站 《钟炯恩 大数据云原生运维平台实践》
  17. django图形验证码和邮件
  18. 查询 (Tcode)跳转ID方法:(SET PARAMETER ID)
  19. 大数据学习之路一(大数据概念、特点、应用场景)
  20. 三句话巧记23中设计模式

热门文章

  1. 移动端根据设计稿宽度适配 px转换相对单位rem
  2. jvm类加载过程_JVM类生命周期概述:加载时机与加载过程
  3. Java笔记-加密应用在网络通信中的使用
  4. Java工作笔记-发送SOAP协议请求
  5. HTTP中CORS跨域请求的实现(C++|Qt框架实现)
  6. Qt文档阅读笔记-QTcpServer官方解析与实例(使用QSocket创建简单的HTTP服务器)
  7. Qt工作笔记-在Graphics上写文本(QGraphicsSimpleTextItem与QGraphicsTextItem的基本使用)
  8. C++工作笔记-模版类要注意的地方(对比模版函数)
  9. Qt工作笔记-QTreeWidgetItem中type的基本用法
  10. 多实例多进程网络编程PHP,php socket网络编程基础知识(四):多进程