• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++动态规划之背包问题解决方法

C++动态规划之背包问题解决方法

作者:司青 字体:[增加 减小] 来源:互联网 时间:2017-05-28

司青 通过本文主要向大家介绍了c++背包问题,c++动态规划,c++动态数组,c++动态二维数组,c++动态数组定义等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了C++动态规划之背包问题解决方法。分享给大家供大家参考。具体分析如下:

问题描述:

背包的最大容量为W,有N件物品,每件物品重量为w,价值为p,怎样选择物品能使得背包里的物品价值最大?

输入:
10 3   (W,N)
4 5   (w,p)
6 7   (w,p)
8 9   (w,p)

实现代码:

#include <stdio.h>
#define THING  20
#define WEIGHT 100
int arr[THING][WEIGHT];
/* 背包容量为weight,依次尝试1 - thing 物品时的最大价值 */
int price[100]; /* 物品价格表 */
int weight[100]; /* 物品重量表 */
 int main()
{
 int i,j;
 int max_weight,max_thing;
  /* 初始化 */
 for(i = 0 ; i < THING ; ++i)
 {
 for(j = 0 ; j < WEIGHT ; ++j)
  arr[i][j] = 0;
 }
  /* 读入数据 */
 scanf("%d%d",&max_weight,&max_thing);
 for(i = 1 ; i <= max_thing ; ++i)
 {
 scanf("%d%d",&weight[i],&price[i]);
 }
  /* 计算 */
 for(i = 1 ; i <= max_thing ; ++i)
 {
 for(j = 1 ; j <= max_weight ; ++j)
 {
  if(j >= weight[i])
  /* 如果当前物品的容量小于背包容量
  (当前物品能放进去) */
  {
  /* 如果当前物品的价值 + 背包剩余空间能放进去的物品价值
  (之间计算过的最佳方案) */
  /* 大于上一次选择的价值,则放入当前物品 */
  if(price[i] + arr[i - 1][j - weight[i]] > arr[i - 1][j])
   arr[i][j] = price[i] + arr[i - 1][j - weight[i]];
  else /* 否则继续沿用上次的选择 */
   arr[i][j] = arr[i - 1][j];
  }
  else /* 当前物品放不进去,继续沿用上次的选择 */
  arr[i][j] = arr[i - 1][j];
 }
 }
  /* 输出最优解 */
 printf("max weight : %d\n",arr[max_thing][max_weight]);
  /* 输出所有子解 arr[][] */
 for(i = 0 ; i <= max_thing ; ++i)
 {
 for(j = 0 ; j <= max_weight ; ++j)
  printf("%3d",arr[i][j]);
 printf("\n");
 }
  return 0;
}
</div>

希望本文所述对大家的C++程序设计有所帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C和C++混合编程问题
  • C++动态规划之背包问题解决方法
  • C++变位词问题分析

相关文章

  • 2017-05-28浅谈C++日志系统log4cxx的使用小结详解
  • 2017-05-28C语言 实现归并排序算法
  • 2017-05-28C++中vector的用法实例解析
  • 2017-05-28简单举例说明C++中break和continue语句的用法
  • 2017-05-28深入理解链表的各类操作详解
  • 2017-05-28C++实现两个日期间差多少天的解决方法
  • 2017-05-28浅谈c和c++的某些小区别
  • 2017-05-28使用OpenGL实现3D立体显示的程序代码
  • 2017-05-28Linux网络编程之UDP Socket程序示例
  • 2017-05-28C++类和对象实例解析(二)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 关于C++ string和c类型字符数组的对比
    • 提高C++程序运行效率的10个简单方法
    • 使用C语言编写基于TCP协议的Socket通讯程序实例分享
    • C 语言简单加减乘除运算
    • C++中extern "C"的用法
    • C语言实现的猴子偷桃之类算法
    • 常用的C语言排序算法(两种)
    • c++制作的时间函数类
    • 一个string类的简单实现案例
    • 常用排序算法的C语言版实现示例整理

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有