时间效率空间效率都是O(nW),n是物品个数,W是背包重量

采用自顶向下,它只对必要的子问题求解并且只解一次。

import java.util.ArrayList;public class MFKnapsack {private int n;private int W;private int[] Weights;private int[] Values;private int[][] V;public ArrayList<Integer> list;public MFKnapsack(int n, int[] weights, int[] values, int w) {super();this.n = n;this.Weights = weights;this.Values = values;this.W = w;this.list = new ArrayList<Integer>();V = new int[n + 1][w + 1];for (int i = 0; i < n + 1; i++)for (int j = 0; j < w + 1; j++) {if (i == 0 || j == 0)V[i][j] = 0;elseV[i][j] = -1;}}// 注意和算法描述时数组边界不同public int mfknapsack(int i, int j) {int value = 0;if (V[i][j] < 0) {if (j < Weights[i - 1]) {value = mfknapsack(i - 1, j);} else {int v1 = mfknapsack(i - 1, j);int v2 = Values[i - 1] + mfknapsack(i - 1, j - Weights[i - 1]);value = (v1 > v2) ? v1 : v2;}V[i][j] = value;}return V[i][j];}public void showV() {for (int i = 0; i < this.n + 1; i++) {for (int j = 0; j < this.W + 1; j++)System.out.print(V[i][j] + "  ");System.out.println();}}public void findnapsack(int i, int j) {if (i != 0) {if (V[i][j] != V[i - 1][j]){list.add(i);findnapsack(i - 1, j - Weights[i - 1]);}else {findnapsack(i-1, j);}}}public static void main(String[] argv) {int n = 4;int w = 5;int[] values = new int[] { 12, 10, 20, 15 };int[] weights = new int[] { 2, 1, 3, 2 };MFKnapsack mfk = new MFKnapsack(n, weights, values, w);System.out.println(mfk.mfknapsack(n, w));mfk.showV();mfk.findnapsack(n, w);System.out.println(mfk.list);}
}

算法设计与分析基础-8.4、背包问题和记忆功能相关推荐

  1. 算法设计与分析基础-笔记-上

    算法设计与分析基础 绪论 什么是算法 一系列解决问题的明确指令,对于符合一定规范的输入,能够在有限的时间内获得要求的输出. 例子:最大公约数:俩个不全为0 的非负整数 m m m和 n n n的最大公 ...

  2. 计算机算法设计与分析读后感,算法设计与分析基础经典读后感有感

    <算法设计与分析基础>是一本由Anany levitin著作,清华大学出版社出版的胶版纸图书,本书定价:49.00元,页数:409,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助 ...

  3. 第一章 算法设计与分析基础知识

    系列文章目录 第一章 算法设计与分析基础知识 第二章 算法的分治策略 第三章 算法的动态规划 第四章 算法的贪心法 -- @[TOC](这里写目录标题) # 一级目录 ## 二级目录 ### 三级目录 ...

  4. 算法设计与分析基础知识

    一.算法设计基础 算法是(algorithm)是对特定问题求解步骤的一种描述,是指令的有限序列. 算法的五个特性: 输入:一个算法可以有零个或多个输入. 输出:一个算法有一个输出或多个输出. 有穷性( ...

  5. 【算法设计与分析基础】21、动态规划-背包问题

    问题: * 对一组物品: * 重量为:w1,w2,w3....wn * 价值为:v1,v2,v3,....vn * 和一个可以存放重量为W的背包 * 求这些物品装进去如何才会是最右价值的装法 解题思路 ...

  6. 算法设计与分析基础知识点

    前言:全文参考徐承志老师的PPT 适合期末复习,查缺补漏,有缺漏或错误欢迎指正,后面的第九章内容之后会继续补充. 目录 一.算法基础概念 二.算法分析基础 1.概念 2.算法设计的一般过程 3.时间复 ...

  7. 算法设计与分析基础第三版

    课后题答案 一.算法级基础知识 1.算法的基本概念 解决问题的确定方法和有限步骤称为算法,对于计算机科学来说,算法指的是对特定问题的求解步骤的一种描述,是若干条指令的有穷序列.并有以下特性:输入.输出 ...

  8. 算法设计与分析基础 第一章谜题

    习题1.1 10.b 欧几里得游戏 一开始,板上写有两个不相等的正整数,两个玩家交替写数字,每一次,当前玩家都必须在板上写出任意两个板上数字的差,而且这两个数字必须是新的,也就是说,不能与板上任何一个 ...

  9. 算法设计与分析基础 第六章谜题

    习题6.1 9.数字填空 给定n个不同的整数以及一个包含n个空格的序列,每个空格之间事先给定有不等(>或<)符号,请设计一个算法,将n个整数填入这n个空格中并满足不等式约束.例如,数4,6 ...

最新文章

  1. 获得汉字字符串拼音首字母
  2. 远程办公指南 | 齐心守护健康,共倡远程协同
  3. C语言求在算术级数中找到缺少的数字(附完整源码)
  4. spring的ModelAndView
  5. 结构变量的定义和引用
  6. debian linux vnc,Debian 如何配置安装Xfce桌面+VNC远程桌面服务
  7. iPhone 12 mini被质疑锁屏触摸不灵
  8. 不管你学的是什么专业,你都应该多少懂些管理学的...
  9. C - Bone Collector(背包问题)(01背包)
  10. SNMP 模拟器 vxsnmpsimulator 使用方法
  11. vmware workstation server 服务无法启动
  12. 电商seo培训之卖家搜索优化步骤
  13. [Bada开发]基于bada1.0的5种控件介绍[待续]
  14. 打印机模拟(灰度篇)
  15. 【C++ 程序】 复数类 (Complex)
  16. [魅族Degao]Android客户端性能优化
  17. 物理建模钢琴-Modartt Pianoteq Pro v6.7.0 WiN
  18. zhengyang:全面了解风控决策引擎
  19. 044_面向对象_17_封装
  20. 假如有人把支付宝的服务器炸了, 存在支付宝里的钱是不是没了?

热门文章

  1. 漏洞原理防御(寒假)
  2. 高数 | 为什么凹凸区间,单调区间不能并起来?因为一杯水不能灌满。
  3. IOS中定时器NSTimer
  4. 为什么粘滞定位失效问题
  5. 从原理到代码 梳理姿态更新计算的四元数算法
  6. FANUC机器人点动模式JOG相关警告代码含义及处理办法
  7. OpenAI GPT-4发布总结
  8. 互联网传统进入要交的学费-怎么样才能成功
  9. 基于 tensorflow 的鲜花识别
  10. 计算机应用能力考试模块选择,计算机应用能力模块考试题及答案