蓝桥杯之动态规划冲刺

文章目录

  • 动态规划
    • 01背包
      • 小练一下
      • 01背包
      • 网格图上的DP
      • 完全背包
    • 最长公共字符串
    • 最长递增子序列

动态规划

在这里插入图片描述
在这里插入图片描述

  • 动态规划:确定好状态方程,我们常常是确定前 当状态来到 i 时,前 i 个物体的状态是怎么样的,我们并不是从一个点去考虑,也就是说虽然我们分割问题,但是问题是相互联系的,那么这就是区别于递归的本质区别

在这里插入图片描述

01背包

在这里插入图片描述
由于不能拆开,那就是DP 问题,如果能拆开,那就是贪心问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小练一下

01背包

在这里插入图片描述

import os
import sys# 请在此输入您的代码N,V = map(int,input().split())w = []
v = []
w.append(0)
v.append(0)for i in range(N):a,b = map(int,input().split())w.append(a)v.append(b)dp = [[0]*(V+1) for _ in range(N+1)]for i in range(1,N+1):# 取出第i 个物品for j in range(V+1):if j-w[i]<0:dp[i][j]=dp[i-1][j]else:dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i])print(dp[N][V])

在这里插入图片描述
在这里插入图片描述

  • 可以对空间进行优化:只用添加两个变量来存储new,old 就是利用滚动数组,两个数组即可解决

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

import os
import sysV = int(input())#####箱子容量
n = int(input())####物品数量
l = [0]####各自体积
for i in range(n):####输入体积l.append(int(input()))
dp = [[0 for j in range(V+1)]for i in range(n+1)]for i in range(1,n+1):###for j in range(1,V+1):####if j < l[i]:####dp[i][j] = dp[i-1][j]else:dp[i][j]=max(dp[i-1][j],dp[i-1][j-l[i]]+l[i])###
print(V-dp[n][V])

同样的思路:还是用二维数组存储,dp[i][j]表示 前i 个物体在空间j 的情况下,所能放的空间的大小

网格图上的DP

在这里插入图片描述

  • 对于网格的问题,咋一看好像可以用搜索来解决,但是搜索的话可能就会超时,所以我们可以用动态规划来做,那么如何进行定义?
    dp[i][j] 就是走到(i,j) 的时候的路径数,那么就有 动态规划的式子 :
    dp[i][j] = dp[i-1][j] + dp[i][j-1] 得来
    对于不能到达的地方,就直接 设置dp 值为0即可
    巧妙地地方:让出发点以及🐎所在地点以及终点都偏移,这样就可以方便解决出界地问题
import os
import sys# 请在此输入您的代码bx, by, mx, my = map(int, input().split())bx += 2
by += 2
mx += 2
my += 2dp = [[0] * (30) for i in range(30)]s = [[False] * 30 for i in range(30)]dp[2][1] = 1
s[mx][my] = Trues[mx - 1][my - 2] = True
s[mx - 1][my + 2] = True
s[mx - 2][my - 1] = True
s[mx - 2][my + 1] = True
s[mx + 1][my - 2] = True
s[mx + 1][my + 2] = True
s[mx + 2][my - 1] = True
s[mx + 2][my + 1] = Truefor i in range(2, bx + 1):for j in range(2, by + 1):if s[i][j]:dp[i][j] = 0else:dp[i][j] = dp[i - 1][j] + dp[i][j - 1]print(dp[bx][by])

完全背包

在这里插入图片描述

  • 完全背包问题就是在01 背包的基础上,每一件物品是没有个数的限制的,不过可以参照01 背包的思路,因为当第i 种物品的第一件物品就是01 背包问题,后面就是要考虑第 i 件物品
    状态方程
    1.dp[i][j] 表示前 i 种物品,在空间为 j 下能够装下的最大的价值
    2.那么当 pw[i] 第 i 件物品占用的体积大于 j 的时候,那么就只能
    dp[i][j] = dp[i-1][j]
    3.当pw[i] 第 i 件物品占用的体积小于等于 j 的时候,那么就是考虑第i 种物品选不选的问题了,也就是
    dp[i][j] = max(dp[i-1][j] ,dp[i][j-pw[i]]+pv[i])
    其中,dp[i-1][j] 是考虑不选第i 种物品,dp[i][j-pw[i]]+pv[i](01背包的本质区别)是在选了第i 种物品的基础上,再选几件的问题
import os
import sys# 请在此输入您的代码N,V = map(int ,input().split())
pw=[0]
pv=[0]
dp = [[0]*(V+1) for i in range(N+1)]for i in range(N):a,b = map(int,input().split())pw.append(a)pv.append(b)for i in range(1,N+1):for j in range(1,V+1):if j<pw[i]:dp[i][j] = dp[i-1][j]else:dp[i][j] = max(dp[i-1][j],dp[i][j-pw[i]]+pv[i])print(dp[N][V])

最长公共字符串

在这里插入图片描述

  • 对于这个问题,我们就要考虑从二维方面出发:
    dp[i][j] 表示前i 个 x 的字符 和前 j 个 y 的字符的最长的公共子序列的长度
    1.当x[i]==y[j] 的时候,那么就直接是dp[i][j] = dp[i-1][j-1] +1
    2.不相等的时候,就是dp[i][j] = max(dp[i-1][j],dp[i][j-1])

对于统计数目的话,还在研究:

import os
import sys# 请在此输入您的代码x = input()
y = input()# dp[i][j] 表示 x=xi 与 y=yj 时x与y 的最大的公共子序列的长度
lenx = len(x)
leny = len(y)dp = [[0]*(len(y)) for i in range(len(x))]for i in range(lenx):if x[i]==y[0]:dp[i][0]=1
for i in range(leny):if x[0]==y[i]:dp[0][i]=1for i in range(1,lenx):for j in range(1,leny):if x[i]==y[j]:dp[i][j]=dp[i-1][j-1]+1else:dp[i][j]=max(dp[i-1][j],dp[i][j-1])length =dp[lenx-1][leny-1]
sum=0
for i in range(lenx):for j in range(leny):if dp[i][j]==length:sum = sum +1sum = sum%100000000
print(length)
print(sum)

最长递增子序列

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

数据库基本介绍及编译安装mysql

目录 数据库介绍 数据库类型 数据库管理系统&#xff08;DBMS&#xff09; 数据库系统 DBMS的工作模式 关系型数据库的优缺点 编译安装mysql 数据库介绍 数据&#xff1a;描述事物的的符号纪录称为数据&#xff08;Data&#xff09; 表&#xff1a;以行和列的形式组成…

mysql迁移达梦数据库 Java踩坑合集

达梦数据库踩坑合集 文章目录 安装达梦设置大小写不敏感Spring boot引入达梦驱动&#xff08;两种方式&#xff09;将jar包打入本地maven仓库使用国内maven仓库&#xff08;阿里云镜像&#xff09; 达梦驱动yml配置springboot mybatis-plus整合达梦,如何避免指定数据库名&…

常用负载均衡详解

一、介绍 在互联网场景下&#xff0c;负载均衡&#xff08;Load Balance&#xff09;是分布式系统架构设计中必须考虑的一个环节&#xff0c;它通常是指将负载流量&#xff08;工作任务、访问请求&#xff09;平衡、分摊到多个操作单元&#xff08;服务器、组件&#xff09;上去…

Vue 计算属性和watch监听

1.1.计算属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!-- 引入vue.js --><script src"node_modules/vue/dist/vue.js"></script> </h…

如何在尽量不损害画质的前提下降低视频占内存大小?视频格式科普及无损压缩软件推荐

大家好呀&#xff0c;相比大家都有对视频画质和体积的追求和取舍&#xff0c;那么&#xff0c;如何才能在不牺牲画质的前提下&#xff0c;尽可能的将视频大小降低到极致呢&#xff1f; 首先我们要了解视频的构成&#xff0c;要想降低视频的体积大小&#xff0c;我们可以从以下几…

FITS:一个轻量级而又功能强大的时间序列分析模型

AI预测相关目录 AI预测流程&#xff0c;包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…

MySQL 多表查询强化练习

环境准备 create table dept(id int PRIMARY KEY,dname VARCHAR(50),loc VARCHAR(50) ); insert into dept values (10,研发部,北京), (20,学工部, 上海), (30,销售部,广州 ), (40,财务部,深圳);create table job(id int PRIMARY KEY,jname VARCHAR(20),descripition VARCHAR(…

【web世界探险家】HTML5 探索与实践

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &…

129740-002 是ABB生产的模块吗?

ABB 129740-002是一款智能模拟量输入输出IO模块。 这款模块的主要功能是进行模拟信号与数字信号之间的转换。具体来说&#xff0c;它可以将模拟信号转换为数字信号&#xff0c;也可以将数字信号转换回模拟信号。这一特性使其在工业应用中具有重要作用&#xff0c;尤其是在过程…

Cesium新版修改源码后,编译不生效问题

最新版本的cesium源码在编译时默认使用node_models下的cesium/engine&#xff0c;从而导致咱们修改项目中的源码并不会生效 解决方式 &#xff1a; 进入到实际的源码位置&#xff0c;执行npm link 在返回到源码的根目录下执行 npm link ./packages/engine

vue3 几种实现点击复制链接的方法

vue3 几种实现点击复制链接的方法 环境&#xff1a;vue3tselment plus 目的&#xff1a;常用到的地方就是点击复制分享链接功能 1.复制当前页面链接&#xff0c; <template><div class"news" style"margin-top: 30px"><el-button type&q…

游戏 AI 反作弊|内附解决方案详情!

我们提出使用在游戏中广泛存在的回放日志数据&#xff0c;重构出玩家当局的表现。在回放 日志数据中&#xff0c;我们构建了玩家的时序行为数据&#xff0c;并基于该时序行为数据&#xff0c;分别搭建 了透视和自瞄外挂检测系统&#xff0c;该方法和系统可广泛应用于各种在线…

SAP STMS请求重复传输

STMS 在接请求的导入的时候&#xff0c;第一次发生了错误&#xff0c;在修复了错误之后&#xff0c; 该请求二次导入显示已经该请求已全部导入 可以按如下操作进行再次导入 附加--》其他请求--》添加 输入请求号并勾选再次导入 然后点选需要重复导入的请求号即可再次导入

AI算力池化赋能企业大模型价值探索

1. 大语言模型企业落地中的算力痛点 随着人工智能技术的飞速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;成为了热门的研究领域之一。在这一领域中&#xff0c;大语言模型&#xff08;Large Language Models&#xff09;凭借其强大的语言理解和生成能力&#xff…

学习笔记-华为IPD转型2020:3,IPD的实施

3. IPD的实施 1999 年开始的 IPD 转型是计划中的多个转型项目中的第一个&#xff08;Liu&#xff0c;2015&#xff09;。华为为此次转型成立了一个专门的团队&#xff0c;从大约20人开始&#xff0c;他们是华为第一产业的高层领导。董事会主席孙雅芳是这个团队的负责人。该团…

【Maven】使用maven-jar、maven-assembly、maven-shade优雅的实现第三方依赖一同打Jar包

文章目录 一.前言二.常规Jar 打包&#xff1a;maven-jar-plugin三.Shade 打包&#xff1a;maven-shade-plugin1.如何使用2.将部分jar包添加或排除3.将依赖jar包内部资源添加或排除4.自动将所有不使用的类排除5.将依赖的类重命名并打包进来 &#xff08;隔离方案&#xff09;6.修…

【Linux】项目部署CPU彪高如何定位

1.查看所有CPU占比 使用top指令获取彪高进程的PID 2.输出进程的信息 ps H -eo pid,tid,%cpu | grep 1313 3.查看线程的信息 jstack tid nid都是十六进制的 4.进制转换 将 tid的十进制转为十六进制 找到nid 可以定位到具体位置 5.关闭程序 ps -ef | grep java kill -9 jav…

机器人路径规划:基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(提供Python代码)

迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的&#xff0c;因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法&#xff0c;解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始&#xff0c;采用贪心算法的策略&#…

通过更新路书当前坐标下marker的icon来展示沿途的风景

通过更新路书当前坐标下marker的icon来展示沿途的风景 1.效果图2.[工程链接](https://download.csdn.net/download/m0_61864577/88978866)3.需修改地方: 本文演示了如何通过百度地图的路书功能,展示途经的风景。定时缩放,既有全局路径,又有当前位置和运动轨迹;可以显示当前坐标…

万界星空科技铜拉丝行业生产管理MES系统

铜拉丝加工作为金属加工行业中的一个重要分支&#xff0c;在国内乃至全球工业领域都扮演着不可或缺的角色。特别是在高导材料领域&#xff0c;铜拉丝加工更是发挥着重要作用。 铜作为一种传统的金属材料&#xff0c;其拉丝加工技术早在古代就有应用。随着工业化进程的加快&…