蓝桥杯之动态规划冲刺

文章目录

  • 动态规划
    • 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.rhkb.cn/news/279981.html

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

相关文章

Python爬虫获取接口数据

Python爬虫获取接口数据 正常人的操作​​​​​​​​​​爬虫的思路标题获取请求信息标题请求转换为代码完整代码请求返回信息执行程序获取静态网页数据的教程,适用于我们要爬取的数据在网页源代码中出现,但是还是有很多的数据是源代码中没有的,需要通过接口访问服务器来获…

【计算机组成】27、有符号数和无符号数

文章目录 int 是有符号数 uint 是无符号数 所以 int8 的 范围是 -128 到 127 uint8 的范围是 0 到 255 同样的二进制 1000-0000 如果用 uint8 解释则为 255&#xff0c;但如果用 int8 解释则为 -128 同样的二进制 0111-1111 如果用 uint8 解释则为 127&#xff0c;但如果用…

云蜜罐技术(德迅猎鹰)诞生

数字化程度高且高价值信息密集的行业&#xff0c;如金融、能源、互联网、政府、教育、医疗、军工等行业&#xff0c;面对日益规模化、专业化的网络攻击&#xff0c;渐渐不再满足于一味的防守加固。除了巩固防线之外&#xff0c;他们愈发看重主动出击、感知更大范围内的攻击&…

MySQL的概述与安装

一、数据库的基本概念&#xff1a; 1.1 数据&#xff1a; 1&#xff09; 描述事物的符号记录称为数据&#xff08;Data&#xff09;。数字、文字、图形、图像、声音、档案记录等 都是数据。 2&#xff09;数据是以“记录”的形式按照统一的格式进行存储的&#xff0c;而不是…

Ubuntu 如何安装 Beyond Compare?

Ubuntu20.04安装Beyond Compare 4.3.7 一、官网下载方式一&#xff1a;方法二&#xff1a;使用 .deb 包安装 二、安装相关依赖和bcompare三、破解常见错误解决方法 ) 文件比较工具Beyond Compare是一套由Scooter Software推出的文件比较工具。主要用途是对比两个文件夹或者文件…

2024-3-13,14(CSS)

1.复合选择器 有两个或者多个基础选择器&#xff0c;通过不同的方式组合而成。 目的是更加准确高效的选择目标元素&#xff08;标签&#xff09; 分类&#xff1a; 后代选择器&#xff1a;选中某个元素的所有后代元素 写法&#xff1a;父选择器 子选择器 {CSS属性}&#x…

【导论】数据可信流通 从运维信任到技术信任

信任 信任概念由于其抽象性和结构复杂性&#xff0c;在社会学、心理学、营销学、经济学、管理学等不同 的领域定义是不同的&#xff0c;但是达成共识的观点是&#xff1a;信任是涉及交易或交换关系的基础。 信任的基石 ①身份可确认&#xff0c;②利益可依赖&#xff0c;③能…

内网渗透学习-环境搭建

1、环境搭建测试 虚拟机网络环境配置&#xff0c;模拟外网和内网 主机操作系统网络内网ip外网ip物理主机window10vmnet8192.168.70.1攻击机kali Linuxvmnet8192.168.70.134域控主机win server 2008 r2vmnet0192.168.52.138域成员主机win server 2k3vmnet0192.168.52.141服务器…

ThingsBoard Edge 安装部署

文章目录 一、概述1.官方文档2.部署说明3.安装准备3.1. 克隆服务器3.2.安装 Docker3.3.安装 Java 113.4.安装 PostgreSQL3.5.下载安装包 二、安装部署1.创建 Edge 实例2.创建数据库3.Edge 服务安装3.1.安装服务3.2.配置 Edge3.3.运行安装脚本3.4.重新启动服务 4.访问 Edge5.故障…

C#,图论与图算法,图着色问题(Graph Coloring)的威尔士-鲍威尔(Welch Powell Algorithm)算法与源代码

Welsh, D.J.A. and Powell, M.B. (1967) An Upper Bound for the Chromatic Number of a Graph and Its Application to Timetabling Problems. 《The Computer Journal》, 10, 85-86. 《The Computer Journal》 1 图着色算法概述 1967年,Welsh和Powell算法引入了图色数的上…

linux最佳入门(笔记)

1、内核的主要功能 2、常用命令 3、通配符&#xff1a;这个在一些启动文件中很常见 4、输入/输出重定向 意思就是将结果输出到别的地方&#xff0c;例如&#xff1a;ls标准会输出文件&#xff0c;默认是输出到屏幕&#xff0c;但是用>dir后&#xff0c;是将结果输出到dir文…

golang面试题总结

零、go与其他语言 0、什么是面向对象 在了解 Go 语言是不是面向对象&#xff08;简称&#xff1a;OOP&#xff09; 之前&#xff0c;我们必须先知道 OOP 是啥&#xff0c;得先给他 “下定义” 根据 Wikipedia 的定义&#xff0c;我们梳理出 OOP 的几个基本认知&#xff1a; …

房屋租赁系统|基于JSP技术+ Mysql+Java+ B/S结构的房屋租赁系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

软考 系统架构设计师系列知识点之系统性能(1)

所属章节&#xff1a; 第2章. 计算机系统基础知识 第9节. 系统性能 系统性能是一个系统提供给用户的所有性能指标的集合。它既包括硬件性能&#xff08;如处理器主频、存储器容量、通信带宽等&#xff09;和软件性能&#xff08;如上下文切换、延迟、执行时间等&#xff09;&a…

vulnhub-----SickOS靶机

文章目录 1.信息收集2.curl命令反弹shell提权利用POC 1.信息收集 ┌──(root㉿kali)-[~/kali/vulnhub/sockos] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:10:3c:9b, IPv4: 10.10.10.10 Starting arp-scan 1.9.8 with 256…

十四、GPT

在GPT-1之前&#xff0c;传统的 NLP 模型往往使用大量的数据对有监督的模型进行任务相关的模型训练&#xff0c;但是这种有监督学习的任务存在两个缺点&#xff1a;预训练语言模型之GPT 需要大量的标注数据&#xff0c;高质量的标注数据往往很难获得&#xff0c;因为在很多任务…

SSL---VPN

文章目录 目录 一.SSL-VPN概述 优点 二.SSL协议的工作原理 三.虚拟网关技术 用户认证方式 本地认证 服务器认证&#xff1a; 证书匿名认证 Web代理 Web-link和Web改写 端口转发 网络扩展&#xff08;允许UDP协议&#xff09; 总结 一.SSL-VPN概述 SLL VPN是一种基于HTTPS&am…

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

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

在centOS服务器安装docker,并使用docker配置nacos

遇到安装慢的情况可以优先选择阿里镜像 安装docker 更新yum版本 yum update安装所需软件包 yum install -y yum-utils device-mapper-persistent-data lvm2添加Docker仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.rep…

JavaScript中对象属性的顺序问题

我们首先需要了解的是&#xff0c;在JavaScript中&#xff0c;对象的属性名只能是字符串或者symbol。假设我们给将属性名设置为非string和symbol类型&#xff0c;都会被隐式转换成字符串。 let a {1: 1,true: true, } // 等同于 let a {1: 1,true: true, }a[{}] {} a[()>…