2024蓝桥杯每日一题(区间DP)

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

        试题一:游戏
        试题二:石子合并
        试题三:密码脱落
        试题四:能量项链


试题一:游戏

【题目描述】

        玩家一和玩家二共同玩一个小游戏。给定一个包含 N 个正整数的序列。由玩家一开始,双方交替行动。每次行动可以在数列的两端之中任选一个数字将其取走,并给自己增加相应数字的分数。(双方的初始分都是 0 分)当所有数字都被取完时,游戏结束。分更高的一方获胜。请计算,如果双方都采取最优策略进行游戏,则游戏结束时,双方的得分各是多少。

【输入格式】

        第一行包含整数 N。

        后面若干行包含 N 个整数,表示这个序列。注意每行不一定恰好包含一个数。

【输出格式】

        共一行,两个整数,分别表示玩家一和玩家二的最终得分。

【数据范围】

        2≤N≤100
        数列中的数字的取值范围为 [1,200]

【输入样例】

6
4 7 2 9
5 2

【输出样例】

18 11

【解题思路】

        采用一般的DP分析方法,f[i][j][k]表示玩家j在区间i~j的最大取值。
        所以考虑如何状态转移,它肯定是由对手1-k选左边的或者选右边的得到,也即是f[i][j][k] = max(f[i][j][k],s[j] - s[i]  - f[i+1][j][1-k] + a[i],s[j-1]-s[i-1] - f[i][j-1][1-k] + a[j]  )。最后的答案为f[1][n][0],s[j]-f[1][n][0]。

【Python程序代码】

n = int(input())
a,s = [0],[0]*(n+10)
while True:try:tep = list(map(int,input().split()))a += tepexcept:break
f = [[[0]*2 for i in range(210)] for j in range(210)]
for i in range(1,n+1):s[i] = s[i-1]+a[i]
for i in range(1,n+1):for k in [0,1]:f[i][i][k]=a[i]f[i-1][i][k]=max(a[i],a[i-1])
for i in range(n,0,-1):for j in range(i+1,n+1):for k in [0,1]:# 取右边f[i][j][k] = max(f[i][j][k], s[j-1]-s[i-1] - f[i][j-1][1-k] + a[j])# 取左边f[i][j][k] = max(f[i][j][k], s[j]-s[i] - f[i+1][j][1-k] + a[i])
print(f[1][n][0],s[j]-f[1][n][0])

试题二:石子合并

【题目描述】

        设有 N 堆石子排成一排,其编号为 1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有 4 堆石子分别为 1 3 5 2, 我们可以先合并 1、2堆,代价为 4,得到 4 5 2, 又合并 1、2堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为 4+9+11=24;如果第二步是先合并 2、32 堆,则代价为 7,得到 4 7,最后一次合并代价为 11,总代价为 4+7+11=22。问题是:找出一种合理的方法,使总的代价最小,输出最小代价。

【输入格式】

        第一行一个数 N 表示石子的堆数 N。

        第二行 N 个数,表示每堆石子的质量(均不超过 1000)。

【输出格式】

        输出一个整数,表示最小代价。

【数据范围】

        1≤N≤300

【输入样例】

4
1 3 5 2

【输出样例】

22

【解题思路】

        采用区间DP的方法,f[i][j]表示将区间i-j合并需要付出的最小代价,所以先枚举区间长度,然后枚举做端点,如果左端点为1则赋值f[i][j]=0,否则枚举区间断点k在i+1~j-1的范围,状态转移方程为:f[i][j] = min(f[i][j],f[i][k] + f[k+1][j] + s[j]-s[i-1]),最后的答案为f[1][n]

【Python程序代码】

n = int(input())
a = [0] + list(map(int,input().split()))
s = [0]*(n+10)
for i in range(1,n+1):s[i] = s[i-1]+a[i]
f = [[1e9]*(n+10) for _ in range(n+10)]
for le in range(1,n+1):i = 1while i+le-1<=n:j = i+le-1if le==1:f[i][j]=0i+=1continuefor k in range(i,j):f[i][j] = min(f[i][j],f[i][k]+f[k+1][j]+s[j]-s[i-1])i+=1
print(f[1][n])

试题三:密码脱落

【题目描述】

        X星球的考古学家发现了一批古代留下来的密码。这些密码是由A、B、C、D 四种植物的种子串成的序列。仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。你的任务是:给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。

【输入格式】

        共一行,包含一个由大写字母ABCD构成的字符串,表示现在看到的密码串。

【输出格式】

        输出一个整数,表示至少脱落了多少个种子。

【输入样例】

ABDCDCBABC

【输出样例】

3

【解题思路】

        其实就是求最长回文子序列,可以采用区间DP的方法,先枚举区间长度,然后枚举区间左端点,如果区间长度为1则f[i][j]=1,否则当s[i]!=s[j]时,f[i][j] = max(f[i+1][j],f[i][j-1]),当s[i]==s[j]时,f[i][j] = max(f[i][j],f[i+1][j-1]+2).最后答案为n - f[0][n-1]

【Python程序代码】

f = [[0]*(1010) for _ in range(1010)]
s = input()
n = len(s)
for le in range(1,n+1):i = 0while i+le-1<n:j = i+le-1if le==1:f[i][j]=1else:f[i][j] = max(f[i + 1][j], f[i][j - 1])if s[i] == s[j]:f[i][j] = max(f[i][j], f[i + 1][j - 1] + 2)i += 1
print(n-f[0][n-1])

试题四:能量项链

【题目描述】

        在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链,在项链上有 N 颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是 Mars 人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为 m,尾标记为 r,后一颗能量珠的头标记为 r,尾标记为 n,则聚合后释放的能量为 m×r×n(Mars 单位),新产生的珠子的头标记为 m,尾标记为 n。需要时,Mars 人就用吸盘夹住相邻的两颗珠子,通过聚合得到能量,直到项链上只剩下一颗珠子为止。显然,不同的聚合顺序得到的总能量是不同的,请你设计一个聚合顺序,使一串项链释放出的总能量最大。例如:设 N=4,44 颗珠子的头标记与尾标记依次为 (2,3)(3,5)(5,10)(10,2)。我们用记号 ⊕⊕ 表示两颗珠子的聚合操作,(j⊕k)表示第 j,k 两颗珠子聚合后所释放的能量。则第 4、14、1 两颗珠子聚合后释放的能量为:(4⊕1)=10×2×3=60。这一串项链可以得到最优值的一个聚合顺序所释放的总能量为 ((4⊕1)⊕2)⊕3)=10×2×3+10×3×5+10×5×10=710。

【输入格式】

        输入的第一行是一个正整数 N,表示项链上珠子的个数。

        第二行是 N 个用空格隔开的正整数,所有的数均不超过 1000,第 i 个数为第 i 颗珠子的头标记,当 i<N 时,第 i 颗珠子的尾标记应该等于第 i+1 颗珠子的头标记,第 N 颗珠子的尾标记应该等于第 1 颗珠子的头标记。

        至于珠子的顺序,你可以这样确定:将项链放到桌面上,不要出现交叉,随意指定第一颗珠子,然后按顺时针方向确定其他珠子的顺序。

【输出格式】

        输出只有一行,是一个正整数 E,为一个最优聚合顺序所释放的总能量。

【数据范围】

        4≤N≤100,
        1≤E≤2.1×109

【输入样例】

4
2 3 5 10

【输出样例】

710

【解题思路】

        首先这个这是一个环,如何处理环的首尾相接呢?可以在原数组的末尾在复制一个一样的数组,也就是构建出每一个首尾。最后答案应该为枚举i in [1,n],res = max(res,f[i][i+n])。采用区间DP的方法,先枚举区间长度,然后枚举区间左端点,然后枚举断点k。状态转移方程为:f[ll][r] = max(f[l][r],f[l][k] + f[k][r] + w[l]*w[k]*[r])。

【Python程序代码】

n = int(input())
w = list(map(int,input().split()))
w = [0] + w + w
f = [[0]*(2*n+5) for _ in range(2*n+5)]
for le in range(2,n+2):l = 1while l+le-1<=(n<<1):r = l+le-1if le==2:f[l][r]=0else:for k in range(l+1,r):f[l][r] = max(f[l][r], f[l][k] + f[k][r] + w[l]*w[k]*w[r])l+=1
res = 0
for l in range(1,n+1):res = max(res,f[l][l+n])
print(res)

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

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

相关文章

创新科技助力电子元器件商城的品牌建设与用户体验提升

创新科技可以在电子元器件商城的品牌建设和用户体验提升方面发挥重要作用。以下是一些创新科技可以助力的方面&#xff1a; 虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;技术&#xff1a; 利用VR和AR技术&#xff0c;为用户提供沉浸式的购物体验。…

ios应用内支付

用uniapp开发iOS应用内支付 准备前端代码服务器端处理如果iOS支付遇到问题实在解决不了&#xff0c;可以联系我帮忙解决&#xff0c;前端后端都可以解决&#xff08;添加的时候一定要备注咨询iOS支付问题&#xff09; 准备前端代码 获取支付通道 (uni.getProvider) uni.getPr…

双非本,拿到美团测开实习了——经验分享

前言 最近是春招、暑期实习的高峰期&#xff0c;自己也凭借着持续的准备和一部分运气&#xff0c;较早拿到了美团的测开暑期实习。 以前接到美团的短信&#xff0c;都是外卖送达的通知&#xff0c;没想到自己有一天&#xff0c;也能收到offer录用的通知。虽然是测试开发的岗位…

【详细讲解语言模型的原理、实战与评估】

&#x1f308;个人主页:程序员不想敲代码啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

使用PopLDdecay软件绘制LD衰减图

前记 PopLDdecay是一款用于进行种群遗传学和关联分析的软件。它可以在全基因组水平上进行基因型数据的相关性和衰减分析&#xff0c;帮助研究人员探索种群间的遗传差异和突变选择的模式。 使用PopLDdecay可以实现以下功能&#xff1a; 遗传距离的计算&#xff1a;可以计算遗…

2024.03.18 校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 英特尔中国2024校园招聘 校招 | 英特尔中国2024校园招聘 2、校招&实习 | 小红书 2024届春季校园招聘启动&#xff08;内推&#xff09; 校招&实习 | 小红书 2024届春季…

RGB到CMYK的转换原理及例程

RGB&#xff08;红绿蓝&#xff09;和CMYK&#xff08;青、品红、黄、黑&#xff09;是两种常用的颜色模型&#xff0c;RGB用于表示彩色图像&#xff0c;而CMYK主要用于印刷。RGB到CMYK的转换原理涉及颜色的补色和映射。 RGB颜色模型使用红、绿、蓝三个通道来表示各种颜色。每…

关于Anaconda通过environment.yml配置环境的常见问题解决办法

配环境总是一个老生常谈的问题&#xff0c;有些项目写得好的&#xff0c;会把一些冗余的包删除&#xff0c;只留下必要的包&#xff0c;并且手把手教你pip安装&#xff0c;但是有些项目就直接丢一个200~300行的environment.yaml文件或者requirement.txt文件让你自己去配&#x…

C++之类和对象的中篇

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

【EBS】ORACLE EBS R12财务月结基础

一、月结概述 1、什么叫月结&#xff1a;从字面含义上&#xff0c;即为月底结帐。 2、月结的目的 1&#xff09;会计分期 2&#xff09;财务报告 3、什么叫对帐&#xff1a;即将两套帐核对。在Oracle中&#xff0c;主要指将子模块的帐与总帐核对。 4、为什么要对帐&#xff…

代码随想录——删除有序数组中的重复项(Leetcode26)

题目链接 双指针思想&#xff0c;和上一篇Leetcode27类似 class Solution {public int removeDuplicates(int[] nums) {int slow 0;for(int fast 1; fast < nums.length; fast){if(nums[fast] ! nums[slow]){nums[slow] nums[fast];}}return slow 1;} }

基于Arduino IDE 野火ESP8266模块 JSON数据格式处理

一、库文件 ArduinoJSON 可以使用 ArduinoJSON库 来解析和处理JSON数据。 二、JSON数据 序列化 Serialization 序列化&#xff08;serialization&#xff09;&#xff1a; 序列化是将数据结构或对象状态转换为可存储或传输的格式。 测试代码&#xff1a; #include <Ardu…

【并发编程】线程的基础概念

一、基础概念 1.1 进程与线程A 什么是进程&#xff1f; 进程是指运行中的程序。 比如我们使用钉钉&#xff0c;浏览器&#xff0c;需要启动这个程序&#xff0c;操作系统会给这个程序分配一定的资源&#xff08;占用内存资源&#xff09;。 什么线程&#xff1f; 线程是CP…

如何批量给照片添加圆角?为什么要给照片添加圆角?

公司在对外宣传过程中&#xff0c;往往要要求图片修成圆角。比如在网上公司&#xff0c;就下达过这样的任务&#xff0c;在短时间内将公司所有的物品图片都修成圆角。遇到这种情况哪怕是用专业的PS工具&#xff0c;解决这个问题也是非常麻烦的。那么图片怎么修成圆角又快又高效…

linux离线安装maven

一、下载maven 地址&#xff1a;Maven – Download Apache Maven 使用root权限用户登录服务器 cd /opt sudo mkdir maven cd maven 二、上传maven 使用Xftp工具 三、解压并配置环境变量 tar -zxvf tar -zxvf apache-maven-3.9.6-bin.tar.gz cd apache-maven-3.9.6/ 看到解压…

【Hadoop大数据技术】——Hive数据仓库(学习笔记)

&#x1f4d6; 前言&#xff1a; Hive起源于Facebook&#xff0c;Facebook公司有着大量的日志数据&#xff0c;而Hadoop是实现了MapReduce模式开源的分布式并行计算的框架&#xff0c;可轻松处理大规模数据。然而MapReduce程序对熟悉Java语言的工程师来说容易开发&#xff0c;但…

java.lang.ClassNotFoundException: javafx.application.Application

java8&#xff08;jdk1.8&#xff09;到java10&#xff08;jdk10&#xff09;中内含有JavaFx 在java11&#xff08;jdk11&#xff09;以及以后的版本中剥离出来需要开发者独立下载&#xff0c;另行导入download https://gluonhq.com/products/javafx/java --module-path $FX-P…

【CKA模拟题】综合案例演示如何创建pv和pvc

Useful Resources: Persistent Volumes & Claim 题干 For this question, please set this context (In exam, diff cluster name) kubectl config use-context kubernetes-adminkubernetesCreate a PersistentVolume (PV) and a PersistentVolumeClaim (PVC) using an e…

RuoYi-Vue-Plus (LoginHelper)

一、LoginHelper 功能分析 1-loginByDevice 方法(重点): 用途:基于设备登录 APP 、PC等等,保存用户信息到SESSION中。 SaHolder :satoke提供获取同一个请求的上下文持有对象SaLoginModel:登录模型保存登录相关的信息 loginByDevice 主要做了2件事情: 设置用户信息到上…

半导体实验用耐氢氟酸含氟塑料镊子金属杂质含量低

PFA镊子用于夹取小型片状、薄状、块状样品&#xff0c;广泛应用在半导体、新材料、新能源、原子能、石油化工、无线电、电力机械等行业。 具有耐高低温性&#xff08;可使用温度-200℃&#xff5e;&#xff0b;260℃&#xff09;、耐腐蚀、表面不粘性等特点&#xff0c;用于苛…