c++实现动态规划算法解决0-1背包问题

Main.cpp

//============================================================================
// Name        : Knapsack.cpp
// Author      :
// Version     : 1.0
// Copyright   : Your copyright notice
// Description : 0-1背包算法问题
//============================================================================#include <iostream>
#include<cstdlib>
#include"Knapsack.h"
#include<fstream>
#include <string>
using namespace std;const char up='|';
const char left='-';
const char least='\\';
int** result;   //结果列表int *weight;  //物品重量数组
int *value;     //价值数组void fileInit(int &n,int &max)//
{ifstream in("input.txt");        //read fileif(!in){cout<<"file is not exist!";return;}int num;int maxWeight;in>>num;in>>maxWeight;cout<<endl<<"物品数量:"<<num<<endl<<"最大重量:"<<maxWeight<<endl;weight=new int[num];value=new int[num];cout<<"重量数组:\t";for(int i=0;i<num;i++){in>>weight[i];cout<<setw(5)<<weight[i];}cout<<endl;cout<<"价值数组:\t";for(int i=0;i<num;i++){in>>value[i];cout<<setw(5)<<value[i];}cout<<endl;n=num;max=maxWeight;in.close();
}
int main() {cout << "0-1背包问题演示" << endl<<"从文件input.txt中初始化数据"; // prints Titleint number=0;      //物品数量int maxWeight=0; //背包最大重量fileInit(number,maxWeight);if(number==0){return 0;}result=new int *[number+1];for(int i = 0;i <= number;i++){result[i]=new int[maxWeight+1];}//int* location;      //最优解集合inItResult(result,number+1,maxWeight+1);   //init the resultcout<<"the init table is:"<<endl;print(result,number+1,maxWeight+1);cout<<"the result table is:"<<endl;myKnapsack(value,weight,maxWeight,number,result);print(result,number+1,maxWeight+1);            //打印结果表格cout<<endl<<"最大值为:"<<result[number][maxWeight]<<endl;system("pause");return 0;
}

Knapsack.h

#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;//打印结果矩阵
template<class Type>
void print(Type** m,int n,int c)
{for(int i=0;i<n;i++){for(int j=0;j<c;j++){cout<<setw(5)<<m[i][j];}cout<<endl;}
}//初始化结果矩阵
template<class Type>
void inItResult(Type** result,int n,int c)
{for(int i=0;i<n;i++){for(int j=0;j<c;j++){result[i][j]=0;}}
}//动态规划算法
template<class Type>
void myKnapsack(Type *v,int* w,int c,int n,Type** m)
{for(int i=1;i<n+1;i++){for(int j=1;j<c+1;j++){if(w[i-1]<=j){if(v[i-1]+m[i-1][j-w[i-1]]<m[i-1][j])m[i][j]=m[i-1][j];else m[i][j]=v[i-1]+m[i-1][j-w[i-1]];}else{m[i][j]=m[i-1][j];}}}}

转载于:https://www.cnblogs.com/wizholy/archive/2012/10/21/2742797.html

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

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

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

  2. 动态规划算法思想解决找零钱问题

    前言 关于找零钱问题,网上已经有很多相关的资料以及优秀的文章博客等.这里写这篇博客的初衷很简单,就是为了方便自己,回过头来捡起这个知识能快一点,接受起来更易理解点:他人的文章写的再好,毕竟是别人的,学 ...

  3. C语言动态规划法解决0/1背包问题(详细解答)

    动态规划法解决0/1背包问题(详细解答) 首先让我们回顾一下动态规划法的使用规则: 一..动态规划法的实现思路: 1.划分子问题:将元问题分解为若干个子问题,每一个子问题对应一个决策,并且子问题之间具 ...

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

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

  5. 分枝限界解决0/1背包问题

    1.分枝限界法的概述 采用广度优先产生状态空间树的结点,并使用剪枝函数的方法称为分枝限界法.按照广度优先的原则,一个活结点一旦成为扩展节点后,算法将立刻将符合条件的孩子节点添加进入队列. 2.状态空间 ...

  6. 动态规划算法解最长公共子序列LCS问题

    动态规划算法解LCS问题 作者 July 二零一零年十二月三十一日 本文参考:微软面试100题系列V0.1版第19.56题.算法导论.维基百科. 第一部分.什么是动态规划算法 ok,咱们先来了解下什么 ...

  7. 动态规划算法 dynamic programming

    在大三上算法设计课程的时候,开始接触了动态规划,初学的时候没什么感觉,唯一的印象就是这种方法能逐步根据最优子结构得到最终的最优解.也就是保证每一个子问题的解决得到的都是最优解,那最终得到的答案肯定也是 ...

  8. 自己搜的算法题2.0

    1.二分搜索算法是利用(A )实现的算法. A.分治策略B.动态规划法 C.贪心法 D.回溯法 2.下列不是动态规划算法基本步骤的是(A ). A.找出最优解的性质B.构造最优解C.算出最优解 D.定 ...

  9. 以空间换时间——动态规划算法及其应用:矩阵链相乘

    动态规划算法是5大算法基础中最重要的一个,它专门用来解决平面世界下的应用,即会多次使用二维数组. 当然动态规划算法是空间换时间的算法,也就是说:我们可以利用空间资源来使某算法问题的时间复杂度降到最低. ...

  10. 详解动态规划算法(Python实现动态规划算法典型例题)

    动态规划(Dynamic programming) 是一种在数学.计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法. 动态规划算法是通过拆分问题,定义问题状态和状 ...

最新文章

  1. 浅析网站备案的三大好处——你的网站备案了吗?
  2. cass软件yy命令_WIN10系统中的CASS字体问题
  3. CSS文本对齐text-align详解
  4. [HDU5215]Cycle
  5. DOM(四)——事件、事件模型(冒泡)与事件对象的功能
  6. 比赛-暑假训练赛1 (26 Jul, 2018)
  7. 计算机网络环境中学科教学,浅谈基于计算机网络环境下的农村小学的科学学科教育...
  8. 【MPI学习4】MPI并行程序设计模式:非阻塞通信MPI程序设计
  9. windows终止处理程序( __try __finally) 简单解析
  10. OVM 免费虚拟化软件迭代时间调整,提高产品稳定性!
  11. TCP SYNCookie机制
  12. 41、财务总账科目余额表,三栏式总账,三栏式明细账 查询条件科目增加多选查询
  13. 三八定律时间管理思想
  14. Centos7.8下Nmap的安装与使用
  15. 关于高速光耦6n137的使用总结_高速光耦6n137典型应用电路图汇总(多谐振荡/光电隔离器/光耦开关) - 全文...
  16. tic/toc/cputime测试时间的区别
  17. pytorch RuntimeError: size mismatch, m1: [64 x 784], m2: [784 x 10] at
  18. 【XSY2498】贪吃蛇(bfs/dfs)
  19. 【编译原理入门】–编译器compiler
  20. 风格迁移(Style Transfer)首次学习总结

热门文章

  1. 每日一練06:javascript原生拖拽写的日食
  2. 吴恩达机器学习打卡day6
  3. EXCEL常见数据处理操作(一)
  4. 再掀融资潮 团购网仍后劲不足(团购现状分析)
  5. android绘制立方体带坐标,Android: 直接在bitmap上绘制一个立方体
  6. An invalid domain [.xx.com] was specified for this cookie 异常记录
  7. PMP 学习笔记 第8章 项目质量管理
  8. jsp+ssm计算机毕业设计学校缴费系统【附源码】
  9. 全球定位实景导航 iOS实用应用周排行
  10. 国内云市场,腾讯云、阿里云、华为云,谁能更胜一筹呢?