C语言编程 潜水
  • 14发帖数
  • 14主题数
  • 0关注数
  • 0粉丝
开启左侧

C++经典算法问题:背包问题(迭代+递归算法)!含源码示例

[复制链接]
C语言编程 发表于 2021-10-5 19:01:36 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

                               
登录/注册后可看大图

问题说明

有N件物品和一个容量为V的背包。
第i件物品的重量是w,代价是v
求解将哪些物品装入背包可使这些物品的重量总和不凌驾背包容量,
且代价总和最大。
功能说明

本程序用动态规划的思想解决了背包问题,并用了两种算法: 迭代法、递归法。在迭代法中实现了打印背包问题的表格。
代码简述
通过用户输入数据,程序输入检测,动态分配空间,选择算法, 用动态规划的思想求解背包问题。
迭代法:
通过遍历n行W列,迭代每行每列的值,并把最优解放到 n行(在数组中为第n+1行)W列(在数组中为第W+1列)中。
递归法:
通过每次返回前i个物品和承重为j的最优解, 递归计算总背包问题的最优解。
源码示例

#include #include using namespace std;int **T = NULL;                // 存储背包问题表格的数组指针// 返回两个值的最大值int max(int a, int b) {        return (a > b) ? a : b;}// 迭代法,能显示背包问题的表格int packIterative(int n, int W, int *w, int *v) {                // 循环遍历n行        for (int i = 1; i
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

猜你喜欢
在线客服邮箱
wxcy#wkgb.net

邮箱地址#换为@

Powered by 创意电子 ©2018-现在 专注资源实战分享源码下载站联盟商城