2024蓝桥杯每日一题(线性DP)

news/2024/4/27 14:11:36/文章来源:https://blog.csdn.net/w2563216521/article/details/137073146

备战2024年蓝桥杯 -- 每日一题
Python大学A组

        试题一:乌龟棋
        试题二:最长上升子序列
        试题三:最长公共子序列
        试题四:松散子序列


试题一:乌龟棋

【题目描述】

        小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。乌龟棋的棋盘只有一行,该行有 N 个格子,每个格子上一个分数(非负整数)。棋盘第 1 格是唯一的起点,第 N 格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点。乌龟棋中共有 M 张爬行卡片,分成 4 种不同的类型(M 张卡片中不一定包含所有 4 种类型的卡片),每种类型的卡片上分别标有 1、2、3、4 四个数字之一,表示使用这种卡片后,乌龟棋子将向前爬行相应的格子数。 游戏中,玩家每次需要从所有的爬行卡片中选择一张之前没有使用过的爬行卡片,控制乌龟棋子前进相应的格子数,每张卡片只能使用一次。 游戏中,乌龟棋子自动获得起点格子的分数,并且在后续的爬行中每到达一个格子,就得到该格子相应的分数。玩家最终游戏得分就是乌龟棋子从起点到终点过程中到过的所有格子的分数总和。很明显,用不同的爬行卡片使用顺序会使得最终游戏的得分不同,小明想要找到一种卡片使用顺序使得最终游戏得分最多。现在,告诉你棋盘上每个格子的分数和所有的爬行卡片,你能告诉小明,他最多能得到多少分吗?

【输入格式】

        输入文件的每行中两个数之间用一个空格隔开。

        第 1 行 2 个正整数 N 和 M,分别表示棋盘格子数和爬行卡片数。

        第 2 行 N 个非负整数,a1,a2,……,aN,其中 ai 表示棋盘第 i 个格子上的分数。

        第 3 行 M 个整数,b1,b2,……,bM表示 M 张爬行卡片上的数字。

        输入数据保证到达终点时刚好用光 M 张爬行卡片。

【输出格式】

        输出只有 1 行,包含 1 个整数,表示小明最多能得到的分数。

【数据范围】

        1≤N≤350,
        1≤M≤120,
        0≤ai≤100,
        1≤bi≤4,
        每种爬行卡片的张数不会超过 4040。

【输入样例】

9 5
6 10 14 2 8 8 18 5 17
1 3 1 2 1

【输出样例】

73

【解题思路】

        线性DP,四种卡片,所以枚举四维,状态转移方程应该为f[a][b][c][d] = max(f[a][b][c][d] ,f[a-1][b][c][d]+a[t]),对应的t为跳的总长度,其他维度同理。

【Python程序代码】

n,m = map(int,input().split())
ma = list(map(int,input().split()))
mb = list(map(int,input().split()))
cnt = [0]*5
for i in mb:cnt[i]+=1
f = [[[[0]*(cnt[4]+1) for _ in range(cnt[3]+1)] for i in range(cnt[2]+1)]for j in range(cnt[1]+1)]
for a in range(cnt[1]+1):for b in range(cnt[2]+1):for c in range(cnt[3]+1):for d in range(cnt[4]+1):t = a*1+b*2+c*3+d*4if a:f[a][b][c][d]= max(f[a][b][c][d],f[a-1][b][c][d]+ma[t])if b:f[a][b][c][d]= max(f[a][b][c][d],f[a][b-1][c][d]+ma[t])if c:f[a][b][c][d]= max(f[a][b][c][d],f[a][b][c-1][d]+ma[t])if d:f[a][b][c][d]= max(f[a][b][c][d],f[a][b][c][d-1]+ma[t])
print(f[cnt[1]][cnt[2]][cnt[3]][cnt[4]]+ma[0])

试题二:最长上升子序列

【题目描述】

        给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。

【输入格式】

        第一行包含整数 N。

        第二行包含 N 个整数,表示完整序列。

【输出格式】

        输出一个整数,表示最大长度。

【数据范围】

        1≤N≤1000,
        −109≤数列中的数≤109

【输入样例】

7
3 1 2 1 8 5 6

【输出样例】

4

【解题思路】

        状态转移方程为f[i] = max(f[i],f[j]+1)

【Python程序代码】

n = int(input())
a = [0] + list(map(int, input().split()))
f = [1]*(n+5)
res = 1
for i in range(2,n+1):for j in range(1,i):if a[i]>a[j]:f[i]=max(f[i],f[j]+1)res = max(res,f[i])
print(res)

试题三:最长公共子序列

【题目描述】

        给定两个长度分别为 N 和 M 的字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。

【输入格式】

        第一行包含两个整数 N 和 M。

        第二行包含一个长度为 N 的字符串,表示字符串 A。

        第三行包含一个长度为 M 的字符串,表示字符串 B。

        字符串均由小写字母构成。

【输出格式】

        输出一个整数,表示最大长度。

【数据范围】

        1≤N,M≤1000

【输入样例】

4 5
acbd
abedc

【输出样例】

3

【解题思路】

        线性DP, 当a[i]==b[j]是f[i][j] = f[i-1][j-1]+1,否则f[i][j] = max(f[i-1][j],f[i][j-1])

【Python程序代码】

n,m = map(int,input().split())
a =" " + input()
b =" " + input()
f = [[0]*(max(n,m)+1) for _ in range(max(n,m)+1)]
for i in range(1,n+1):for j in range(1,m+1):if a[i]==b[j]:f[i][j] = f[i-1][j-1]+1else:f[i][j] = max(f[i-1][j],f[i][j-1])
print(f[n][m])

试题四:松散子序列

【题目描述】

        给定一个仅含小写字母的字符串 s,假设 s 的一个子序列 t 的第 i 个字符对应了原字符串中的第 pi 个字符。

        我们定义 s 的一个松散子序列为:对于 i>1 总是有 pi−pi−1≥2。设一个子序列的价值为其包含的每个字符的价值之和(a∼z分别为 1∼26)。求 s 的松散子序列中的最大价值。

【输入格式】

        输入一行包含一个字符串 s。

【输出格式】

        输出一行包含一个整数表示答案。

【数据范围】

        对于 20%20% 的评测用例,|s|≤10|;
        对于 40%40% 的评测用例,|s|≤300;
        对于 70%70% 的评测用例,|s|≤5000;
        对于所有评测用例,1≤|s|≤106,字符串中仅包含小写字母。

【输入样例】

azaazaz

【输出样例】

78

【解题思路】

         题意就是不能取连续的字母,所以考虑用状态机,f[i][j]其中j为0时表示不取,为1时表示取,所以f[i][0] = max(f[i-1][1],f[i-1][0]),f[i][1] = f[i-1][0] + s[i] - 'a' +1

【Python程序代码】

s =" " + input()
f = [[0,0] for _ in range(len(s)+10)]
for i in range(1,len(s)):f[i][0] = max(f[i-1][0],f[i-1][1])f[i][1] = f[i-1][0] + ord(s[i]) -  ord('a') + 1
print(max(f[len(s)-1][0],f[len(s)-1][1]))

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

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

相关文章

C语言例4-3:复合语句,输出a,b的值

代码如下&#xff1a; //复合语句&#xff0c;输出a,b的值 #include<stdio.h> int main(void) {int a 10;printf("a %d\n",a);{int b20; //复合语句printf("b %d\n",b); //复合语句中的数据定义语句放在其他语句的前面}return …

uniapp实现单选组件覆盖选中样式

uniapp实现单选组件覆盖选中样式 完整代码&#xff1a; <!-- 是否选择组件: trueOfFalseChooseBtn --> <template><view class"is-true-body"><view class"btn-con" :class"isTrue ? btn-con-active : " click"clic…

42 ajax 下载文件未配置 responseType blob 导致的文件异常

前言 这是一个最近的关于文件下载碰到的一个问题 主要的情况是, 基于 xhr 发送请求, 获取下载的文件 然后 之后 xhr 这边拿到 字节序列之后, 封装 blob 来进行下载 然后 最开始我们这边没有配置 responseType 为 blob, arraybuffer, 然后 导致下载出来的 文件大小超过了…

前端Web移动端学习day05

移动 Web 第五天 响应式布局方案 媒体查询Bootstrap框架 响应式网页指的是一套代码适配多端&#xff0c;一套代码适配各种大小的屏幕。 共有两种方案可以实现响应式网页&#xff0c;一种是媒体查询&#xff0c;另一种是使用bootstrap框架。 01-媒体查询 基本写法 max-wid…

如何优化财务管理?中小型外贸企业实用指南

在当今全球化的商业环境中&#xff0c;越来越多的中小企业涉足外贸领域&#xff0c;以寻求更广阔的市场和发展空间。在这一过程中&#xff0c;财务管理的重要性尤为凸显&#xff0c;需关注外汇风险、税务合规性、现金流等多个方面的问题。 一、中小企业外贸财务管理难题 币种核…

Python入门练习 - 学生管理系统

Python 实现读书管理系统 """ 实现一个命令行版的读书管理系统 """ import os.path import sys# 使用这个全局变量&#xff0c;来管理所有的学生信息 # 这个列表的每个元素都是一个‘字典’&#xff0c;每 个 字典就分别表示了一个同学students …

argocd cli工具使用

一、前言 ragocd除了使用web界面操作之外&#xff0c;也可以通过argocd cli工具进行操作&#xff0c;关于集群创建、gitlab仓库创建、app创建都是可以通过yaml 文件去操作&#xff0c;使用web界面创建的操作也需要使用argocd cli工具进行备份 二、使用 在argocd部署的章节已经…

阿里云4核16G服务器优惠价格26元1个月、149元半年

阿里云4核16G服务器优惠价格26.52元1个月、79.56元3个月、149.00元半年。2024年腾讯云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也…

MySQL数据库高级语句

文章目录 MySQL高级语句older by 排序区间判断查询或与且&#xff08;or 与and&#xff09;嵌套查询&#xff08;多条件&#xff09;查询不重复记录distinctcount 计数限制结果条目limit别名as常用通配符嵌套查询&#xff08;子查询&#xff09;同表不同表嵌套查询还能用于删除…

Python基础教程:基本数据类型

基本数据类型 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组) 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合) Numbers(数字) 数字数据类型用于存储数值。 他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对…

【正点原子FreeRTOS学习笔记】————(12)信号量

这里写目录标题 一、信号量的简介&#xff08;了解&#xff09;二、二值信号量&#xff08;熟悉&#xff09;三、二值信号量实验&#xff08;掌握&#xff09;四、计数型信号量&#xff08;熟悉&#xff09;五、计数型信号量实验&#xff08;掌握&#xff09;六、优先级翻转简介…

腾讯云GPU云服务器_GPU云计算_异构计算_弹性计算

腾讯云GPU服务器是提供GPU算力的弹性计算服务&#xff0c;腾讯云GPU服务器具有超强的并行计算能力&#xff0c;可用于深度学习训练、科学计算、图形图像处理、视频编解码等场景&#xff0c;腾讯云百科txybk.com整理腾讯云GPU服务器租用价格表、GPU实例优势、GPU解决方案、GPU软…

LinkedIn 互联网架构扩展简史

LinkedIn成立于 2003 年&#xff0c;其目标是连接到您的网络以获得更好的工作机会。第一周只有 2,700 名会员。时间快进了很多年&#xff0c;LinkedIn 的产品组合、会员基础和服务器负载都取得了巨大的增长。 如今&#xff0c;LinkedIn 在全球运营&#xff0c;拥有超过 3.5 亿会…

R使用netmeta程序包实现生存数据的频率学网状meta分析

之前的推文系统的介绍了使用netmeta包实现对二分类变量、连续型变量和罕见事件的网状meta分析。今天的文章介绍如何使用netmeta程序包实现生存数据的频率学网状meta分析&#xff0c;用来评估6种免疫疗法&#xff08; Camrelizumab、Tislelzumab、Toripalimab、Sintilimab、Pemb…

(二)windows配置JDK环境

1、安装包下载地址&#xff0c;官网&#xff1a;Java Archive | Oracle 长期稳定支持版本8、11、17、21 选择一个需要下载的连接点进去&#xff1a; 在下载列表中根据操作系统选择不同的下载包&#xff1a; 注意&#xff1a;部分版本下载需要先登录后才可以下载。 安装包附件…

Canal解决Redis缓存与Mysql数据库的一致性问题

1、什么是Canal&#xff1f; 如何解决Redis缓存与Mysql数据库的一致性问题&#xff1f;我们常用数据双删缓存超时设置去解决。这样最差的情况&#xff0c;就是在超时时间内&#xff0c;数据存在不一致。 canal&#xff0c;译为管道&#xff0c;主要用途是基于 MySQL 数据库增…

(1) 易经与命运_学习笔记

个人笔记&#xff0c;斟酌阅读 占卦的原理 三个铜板&#xff0c;正面是3&#xff0c;反面2&#xff0c;三个一起转&#xff0c;得出6,7,8,9 数字象6老阴7少阳8少阴9老阳 生数和成数 生数和成数应该说出自《河图》。其中一二三四五为生数&#xff0c;六七八九十为成数。 生…

基于k6和python进行自动化性能测试

摘要&#xff1a;在性能测试中&#xff0c;达到相应的性能指标对于一个软件来说十分重要&#xff0c;在本文中&#xff0c;将介绍一种现代化性能测试工具k6。 import http from k6/http; import { sleep } from k6; export default function () { http.get(https://test-api…

正式发布:VitePress 1.0 现代化静态站点生成器!

大家好&#xff0c;我是奇兵&#xff0c;今天介绍一下现代化静态站点生成器!&#xff0c;希望能帮到大家。 3 月 21 日&#xff0c; 由 Vue 团队出品的现代化静态站点生成器 VitePress 正式发布 1.0 版本&#xff01;它专为构建快速、以内容为中心的网站而生&#xff0c;能够轻…

动态多态的注意事项

大家好&#xff1a; 衷心希望各位点赞。 您的问题请留在评论区&#xff0c;我会及时回答。 多态的基本概念 多态是C面向对象三大特性之一&#xff08;多态、继承、封装&#xff09; 多态分为两类&#xff1a; 静态多态&#xff1a;函数重载和运算符重载属于静态多态&#x…