算法体系-20 第二十节暴力递归到动态规划

news2024/11/29 2:54:50

前言 动态规划模型从尝试暴力递归到傻缓存到动态规划

四种模型和体系班两种模型一共六种模型

0.1 从左往右模型

0.2 范围讨论模型范围尝试模型 (这种模型特别在乎讨论开头如何如何 结尾如何如何)

玩家博弈问题,玩家玩纸牌只能那左或者右

0.3 样本对应样本对应模型(特别在乎两个样本结尾如何如何 最长公共子序列)

0.4 业务限制模型

动态规划只是暴力尝试的一个缓存
 

1.2 分析

到当前货物的时候有两种选择,要么选择当前货物,要么不选择当前货物

base 条件的判断分析

if (rest < 0) {

return -1;}

这里为什么不能取return 0,因为上由传下来的剩下的bags的重量要大于0上由的值才是有意义的;

递归改动态规划

第一步找确定的值

if (index == w.length) {

return 0;

}

第二步找动态的值喝确定值之间的关系,动态的值时如何根据静态值退出来的

int p1 = process(w, v, index + 1, rest);

int next = process(w, v, index + 1, rest - w[index]);

这辆动态函数都需要依赖他的一行,最后一行又是确定值

1.3 尝试递归代码

// 所有的货,重量和价值,都在w和v数组里
    // 为了方便,其中没有负数
    // bag背包容量,不能超过这个载重
    // 返回:不超重的情况下,能够得到的最大价值
    public static int maxValue(int[] w, int[] v, int bag) {
        if (w == null || v == null || w.length != v.length || w.length == 0) {
            return 0;
        }
        // 尝试函数!
        return process(w, v, 0, bag);
    }

    // index 0~N
    // rest 负~bag
    public static int process(int[] w, int[] v, int index, int rest) {
        if (rest < 0) {
            return -1;
        }
        if (index == w.length) {
            return 0;
        }
        //不选择当前的货物
        int p1 = process(w, v, index + 1, rest);
        int p2 = 0;
        //要选择当前的货物
        int next = process(w, v, index + 1, rest - w[index]);
        if (next != -1) {
            p2 = v[index] + next;
        }
        return Math.max(p1, p2);
    }

1.4 改动态规划

递归改动态规划

第一步找确定的值

第二步找动态的值喝确定值之间的关系,动态的值时如何根据静态值退出来的

改动态规划 看是否有重复的情况

下面的p(3,10)都会重复

1.5 动态规划代码

public static int dp(int[] w, int[] v, int bag) {
        if (w == null || v == null || w.length != v.length || w.length == 0) {
            return 0;
        }
        int N = w.length;
        int[][] dp = new int[N + 1][bag + 1];
        for (int index = N - 1; index >= 0; index--) {
            for (int rest = 0; rest <= bag; rest++) {
                int p1 = dp[index + 1][rest];
                int p2 = 0;
                int next = rest - w[index] < 0 ? -1 : dp[index + 1][rest - w[index]];
                if (next != -1) {
                    p2 = v[index] + next;
                }
                dp[index][rest] = Math.max(p1, p2);
            }
        }
        return dp[0][bag];
    }

    public static void main(String[] args) {
        int[] weights = { 3, 2, 4, 7, 3, 1, 7 };
        int[] values = { 5, 6, 3, 19, 12, 4, 2 };
        int bag = 15;
        System.out.println(maxValue(weights, values, bag));
        System.out.println(dp(weights, values, bag));
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1815728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MapperStruct拷贝数据的介绍和使用

1、前言 在java 编程中&#xff0c;对象直接拷贝是很常用的方法&#xff0c;最初我们常用spring提供的拷贝工具BeanUtils的copyProperties方法完成对象之间属性的拷贝。但是它有几个明显的如下缺点 1、属性类型不一致导致摸一个属性值拷贝失败 2、通一个字段使用基本类型和包…

2024年高考志愿填报,计算机相关专业还值得选择吗?

一、引言 在科技日新月异的今天&#xff0c;计算机专业无疑是推动社会进步和经济发展的重要力量。从最初的简单数据处理到如今的云计算、大数据、人工智能等前沿技术&#xff0c;计算机专业的发展速度之快、影响之广&#xff0c;已经深入到我们生活的方方面面。本文将详细分析…

Qt程序打包成单个exe文件

文章目录 0. 准备工作1. 使用 windeployqt 提取必要的动态链接库和资源文件1.1 操作步骤1.2 补充 2. 使用 Enigma Virtual Box将文件夹打包成单个exe2.1 操作步骤 0. 准备工作 Qt程序打包用到的工具有&#xff1a; windeployqt &#xff1a;安装Qt时自带Enigma Virtual Box 下…

AUTOSAR学习

文章目录 前言1. 什么是autosar&#xff1f;1.1 AP&#xff08;自适应平台autosar&#xff09;1.2 CP&#xff08;经典平台autosar)1.3 我的疑问 2. 为什么会有autosar3.autosar的架构3.1 CP的架构3.1.1 应用软件层3.1.2 运行时环境3.1.3 基础软件层 3.2 AP的架构 4. 参考资料 …

电商数据都有哪些种类?对电商数据进行分析有什么重要意义?

在数字化时代&#xff0c;电商行业的蓬勃发展带来了前所未有的数据积累。每一笔交易、每一次点击、每一条用户反馈都构成了电商数据的庞大体系&#xff0c;成为企业最宝贵的资产之一。电商数据分析不仅能够帮助企业洞察消费者行为&#xff0c;优化产品和服务&#xff0c;还能在…

一键Mock工具(Http协议接口调试工具)

1. 前言 在进行Web开发时&#xff0c;前端小伙伴通常是和后端开发人员同步进行项目开发&#xff0c;经常会遇到后端开发人员接口还没开发完&#xff0c;也没有可以调试的环境&#xff0c;只能按照接口文档进行“脑回路开发”&#xff0c;无法调用真实的接口&#xff0c;也无法…

IP隔离是什么,你了解多少?

一、IP地址隔离的概念和原理 当我们谈论 IP 地址隔离时&#xff0c;我们实际上是在讨论一种网络安全策略&#xff0c;旨在通过技术手段将网络划分为不同的区域或子网&#xff0c;每个区域或子网都有自己独特的 IP 地址范围。这种划分使网络管理员可以更精细地控制哪些设备或用…

Vue3中子组件挂载问题,父组件修改子组件值的问题

1&#xff0c;首先在父组件导入子组件 挂载 2&#xff0c;传递值给子组件 3&#xff0c;子组件

记录清除挖矿病毒 solrd 过程

1、发现solrd病毒 端午节期间&#xff0c;kafka 服务器被黑客攻击了&#xff0c;植入了挖矿病毒 solrd&#xff0c;这个病毒很聪明&#xff0c;内存&#xff0c;CPU并没有异常升高&#xff0c;以致于上班第一天完全没有察觉。 上班第一天 正常登录服务器查看 flink ,消费kafka…

【JavaScript】简单数据类型 与 复杂数据类型 ① ( 堆内存和栈内存 | 简单数据类型内存存储 | 复杂数据类型内存存储 )

文章目录 一、简单数据类型1、简单数据类型简介2、简单数据类型 null 空类型的特殊性 二、复杂数据类型三、堆内存和栈内存 一、简单数据类型 1、简单数据类型简介 JavaScript 中 , " 简单数据类型 “ 又称为 ” 基本数据类型 " 或 " 值类型 " , 与 简单数…

AI口语练习软件的技术难点

实现AI口语练习软件是一项复杂的任务&#xff0c;需要攻克多项技术难点。随着人工智能技术的不断发展&#xff0c;AI口语练习软件将变得更加智能和人性化&#xff0c;为用户提供更加有效的口语练习体验。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0…

Kubeadm 1.24.x安装教程

第一章 基本环境配置 1.1 配置hosts 所有节点 修改/etc/hosts如下&#xff1a; 192.168.0.93 W31-ywzt-SIT-1 192.168.0.94 W31-ywzt-SIT-2 1.2 CentOS 7安装yum源如下 所有节点 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo…

FastLineDetector(FLD)快速直线检测器的使用方法

操作系统&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code编程语言&#xff1a;C11 1.功能描述 opencv_contrib中有一个用于快速检测直线的类&#xff0c;叫FastLineDetector&#xff0c;下面介绍一下如何使用它&#xff0c;首先要用到一个cv:…

巴伦在接收链路中的应用

一、巴伦的定义 "巴伦"&#xff08;Balun&#xff09;&#xff0c;是一种平衡-不平衡转换器&#xff0c;通常用于将平衡信号&#xff08;如差分信号&#xff09;转换为不平衡信号&#xff08;如单端信号&#xff09;&#xff0c;或者反之。巴伦在无线通信、广播、天…

手机流畅运行470亿大模型:上交大发布LLM手机推理框架PowerInfer-2,提速29倍

卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践&#xff0c;基于大语言模型和RAG技术&#xff0c;集合海量工业领域生态资源方优质产品和知识服务&#xff0c;旨在通过智能搜索、连续交互&#xff0c;实时生成个性化的内容…

GEE数据集——全球河流阻塞数据库 (GROD)1.1 版

全球河流阻塞数据库 (GROD) GROD v1.1&#xff08;文件名&#xff1a;GROD_v1.1.csv&#xff09;&#xff0c;即全球河流阻塞数据库 1.1 版&#xff0c;包含 30549 个人工识别的阻碍河流纵向流动的人为结构。谷歌地球引擎卫星地图上的所有河流障碍物都已在全球陆地卫星河宽&am…

2024年数字技术与智慧教育国际会议(DTSE 2024,7月26-28)

2024年数字技术与智慧教育国际会议&#xff08;DTSE 2024&#xff09;将于2024年7月26日在广东省广州市召开&#xff0c;本次会议专注于“数字技术与智慧教育”领域&#xff0c; 将汇集全球范围内的学者、研究人员以及教育技术开发者&#xff0c;共同探索和分享该领域内的最新学…

软件游戏缺失mfc100u.dll如何解决,教你多种有效的方法

在现代科技日新月异的时代&#xff0c;电脑已经成为我们生活和工作中不可或缺的一部分。然而&#xff0c;随着使用时间的增长&#xff0c;电脑也会出现各种各样的问题。其中&#xff0c;“电脑中丢失mfc100u.dll”是许多用户经常遇到的问题之一。那么&#xff0c;这个问题究竟是…

XXL-JOB分布式任务调度快速入门

文章目录 概念快速启动XXL-JOB调度初始化执行器项目配置执行器新增GLUE模式(Java)的任务新增BEAN模式&#xff08;类形式&#xff09;的任务BEAN模式&#xff08;方法形式&#xff09;的任务参考来源 概念 XXL-JOB是一个开源的分布式任务调度平台&#xff0c;它是一个轻量级、…

Web前端大作业:基于html+css+js的仿酷狗音乐项目(内附源码)

文章目录 一、项目介绍二、项目展示三、源码展示四、获取源码 一、项目介绍 课设是要仿照酷狗音乐的首页进行设计。酷狗音乐是国内知名的音乐应用程序,凭借其优秀的音乐库和智能推荐功能吸引了大量用户群体。模仿酷狗音乐的首页设计,可以让课设展现出专业水准,体现出对优秀产品…