python 基础知识点(蓝桥杯python科目个人复习计划59)

今日复习内容:做题

例题1:建造房屋

问题描述:

小蓝和小桥是两位年轻的建筑师,他们正在设计一座新的城市。

在这个城市中,有N条街道,每条街道上有M个位置可以建造房屋(一个位置只能建造一个房屋),建造一个房屋的费用是1元,小蓝和小桥共有k元的建造预算。

现在,他们想知道,一共有多少种建造方案,满足以下要求:

在每条街道上,至少建造一座房屋;

建造的总成本不能超过k元。

由于方案数可能很大,他们只需要输出答案对10^9 + 7取模的结果。

输入格式:

一行3个整数N,M(1 = N,M <= 30)和K(1 <= K <= N * M),分别表示街道数,街道位置数和预算。

输出格式:

一个整数,表示满足条件的方案数对10^9 + 7取模的结果。

参考答案:

mod = int(1e9) + 7
n,m,k = map(int,input().split())
f = [[0] * (k + 1) for i in range(n + 1)]
for i in range(k + 1):f[0][i] = 1
for i in range(1,n + 1):for j in range(k + 1):for z in range(1,m + 1):if j >= z:f[i][j] = (f[i][j] + f[i - 1][j - z]) % mod
print(f[n][k])

运行结果:

 

以下是我对此题的理解:

这道题涉及动态规划,目标的计算在给定预算下,满足建造要求的方案数。

1.定义了一个二维数组f,其中f[i][j]表示在前i条街道上,总成本为j的方案数。

2.初始化数组f[0][i],表示在0条街道上,总成本为i的方案数,初始化为1,因为无论预算多少,都有一种方案(不建造任何房屋)。

3.使用3层循环,其中第一层循环遍历街道,第二层循环遍历总成本,第3层循环遍历每个街道上可建造的位置。

4.在内层循环中,检查当前总成本j是否大于街道上可建造的位置数z。如果满足条件,则需要更新f[i][j],加上之前街道i - 1上总成本为j - z的方案数。

5.最终输出结果为f[n][k],表示在前n条街道上,总成本为k的方案数。

n,m,k = map(int,input().split()):从标准输入读取三个整数,分别表示街道数n,街道位置数m和预算k

f = [[0] * (k + 1) for i in range(n + 1):这一行代码创建了一个二维列表f,其中包含n + 1行,每行包含k + 1个元素,初始值都为0,这个列表用于存储动态规划过程中的中间结果。

for i in range(k + 1):这个循环遍历了k + 1个预算值,用于初始化第0条街道上的方案数。

f[0][i] = 1:这一行将第0条街道上总成本为i的方案数记为1,因为无论预算多少,都要一个方案,不建造任何房屋。

for i in range(1,n + 1):这个循环遍历了1到n条街道

for j in range(k + 1):这个循环遍历了k + 1个总成本值,,用于计算每条街道上的方案数

for z in range(1,m + 1):这个循环遍历了每个街道上可建造的位置数,从1到m

if j >= z:这个条件判断语句检查当前总成本j是否大于等于当前街道上可建造的位置数z

f[i][j] = (f[i][j] + f[i - 1][j - z]) % mod:这一行更新了当前街道上总成本为j的方案数。它将之前街道i - 1上总成本为j - z的方案数加到当前街道上,并对结果取模。

print(f[n][k]):最后输出结果,表示前n条街道上,总成本为k的方案数。


例题2:破损的楼梯

问题描述:

小蓝来到了一座高耸的楼梯前,楼梯共有N级台阶,从第0级台阶出发。小蓝可以迈上1或2级台阶。但是,楼梯上的第a1级,第a2级,第a3级,以此类推,共M级台阶的台阶面坏掉了,不能踩上去。

现在,小蓝想要到达楼梯的顶端,也就是第N级台阶,但他不能踩到坏了的台阶上,请问他有多少种不能踩到坏了的楼梯但是能到达第N级台阶的方案数?

由于方案数很大,请输出其对10^9 + 7的结果。

输入格式:

第一行包含两个正整数N(1 <= N <= 10^5)和M(0 <= M <= N),表示台阶总数和坏了的台阶级数。

接下来来N行,包含N个整数a1,a2,...,aM,(1 <= a1 < a2 <... < aM <= N),表示坏掉的台阶编号。

输出格式:

输出一个整数,表示小蓝到达楼梯顶层的方案数,对10^9 + 7取模。

参考答案:

mod = int(1e9) + 7
n,m = map(int,input().split())
mm = list(map(int,input().split()))
vis = [0] * (n + 1)
for i in mm:vis[i] = 1
f = [0] * (n + 1)
f[0] = 1
f[1] = 1 - vis[1]
for i in range(2,n + 1):if not vis[i]:f[i] = (f[i - 1] + f[i - 2]) % mod
print(f[n])

运行结果:

 

以下是我对此题的理解:

这个题是一个很经典的冬天规划问题,以下是我的思路:

n,m = map(int,input().split()):从标准输入中读取两个整数,分别表示台阶总数和坏了的台阶数。

mm = list(map(int,input().split())):从输入中读取坏了的台阶的编号,并将它们储存在列表mm中

vis = [0] * (n + 1):创建了一个长度为n + 1的列表,用于标记每个台阶是否坏掉。如果台阶i坏了,则vis[i]的值为1,否则为0.

for i in mm:vis[i] = 1:这个循环将坏掉的台阶编号所对应的vis列表中的值记为1,表示这些台阶坏了。

f = [0] * (n + 1):用于存储动态规划过程中的中间结果,f[i]表示到达第i级台阶的方案数

f[0] = 1:初始第0级 台阶的方案数为0,因为小蓝从第0级台阶出发。

f[1] = 1 - vis[1]:初始化第一级台阶的方案数,如果第一级台阶坏了,则方案数为0,否则为1.

for i in range(2,n + 1):遍历剩下的台阶

if not vis[i]:用于判断此台阶是否坏了,如果没有,就继续执行下面的代码

f[i] = (f[i - 1] + f[i - 2]) % mod:这一行更新了到达第i级台阶的方案数,如果第i - 1级台阶坏了,只能通过第i - 2级台阶才能到达第i级台阶,这里需要考虑台阶的可行性。

print(f[n]):最终输出结果


例题3:拍照

问题描述:

小椒是个摄影爱好者。恰逢班级合照,他受邀帮忙拍照(站成一排)。这本是一件简单的事,但由于啾啾是个完美主义者,他希望拍的照片必须符合美学,即存在一个身高较大值,使得较大值无论往左还是往右身高都是递减的,数学上可以表示为:a[1] <= ... <= a[i] >= a[i + 1] >= ...>= a[n]。同学们已经站好了,但是不符合美学,你需要找出尽可能少的同学出列重新进行排列。请问最少需要出列几个同学?

输入格式:

第一行输入n,表示有n个同学,接下来的n行,输入校友身高,其中第i行输入a[i]( 1 <= i  <= n),输入编号为i的校友的身高(单位是毫米)。

(1 <= n <= 100,1500 <= a[i] <= 1900)

输出格式:

输出一个整数,表示最少需要出队多少个同学。

参考答案:

n = int(input())
a = list(map(int, input().split()))
dp1 = [0] * (n + 1)
dp2 = [0] * (n + 1)for i in range(1, n + 1):dp1[i] = 1for j in range(1, i):if a[i - 1] >= a[j - 1]:dp1[i] = max(dp1[i], dp1[j] + 1)for i in range(n, 0, -1):dp2[i] = 1for j in range(n, i, -1):if a[i - 1] >= a[j - 1]:dp2[i] = max(dp2[i], dp2[j] + 1)ans = 0
for i in range(1, n + 1):ans = max(ans, dp1[i] + dp2[i] - 1)print(n - ans)

运行结果:

 

以下是我对此题的理解:

n = int(input()):从标准输入读取同学的数量n

a = list(map(int,input().split())):从标准输入读取每个同学的身高,并将它们存储在列表a中

dp1和dp2分别代表从左到右和从右到左的动态规划数组。它们的长度都是n + 1,用于存储每个位置的最长符合美学要求的子序列长度。

对于dp1数组,dp1[i]表示以同学i为结束的最长符合美学要求的子序列长度,初始化所有值为1,因为每个同学本身就是一个符合美学要求的子序列

对于dp2数组,dp2[i]表示以同学i为开始的最长符合美学要求的子序列长度,初始化所有值为1,因为每个同学本身就是一个符合美学要求的子序列。

对于每个同学i,在dp1中遍历所有在i之前的同学j,之后就是比较,再输出答案就可以了。


OK,前几天写比赛论文去了,没时间复习,从今天开始,必须挤时间了。

那这篇就这样了,下一篇继续!

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

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

相关文章

迷宫641更优解——蓝桥杯2017

1.优解思路&#xff1a; 秒啊&#xff1a;如果这条路可以走通&#xff0c;则这条路上所有点都可以走通&#xff0c;反之若不可以&#xff0c;则都不可以。 因为比如一个点走了&#xff0c;没走通&#xff0c;这条路上的点都出不去&#xff0c;假如有别的点走路走到这条死路上…

2024.3.7 FreeRTOS 作业

思维导图 练习题 1.使用ADC采样光敏电阻数值&#xff0c;如何根据这个数值调节LED灯亮度。 //打开定时器3的通道3&#xff0c;并且设置为PWM功能HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1…

【Spring云原生系列】Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合!

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

题目 1563: 蓝桥杯-质因数

题目描述: 将一个正整数N(1< N< 32768)分解质因数。例如&#xff0c;输入90&#xff0c;打印出902*3*3*5。 代码: package lanqiao;import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.ne…

开源AI助手AIlice可以控制多个智能体协同完成复杂任务

MyShellAI开源项目AIlice,可以控制多个智能体协同完成复杂的任务,例如文档检索、下载、数据分析、画图等。 并且可以针对任务生成代码在虚拟环境中运行。 AIlice 项目旨在创建一个自包含的人工智能助手,类似于 JARVIS,利用开源模型实现。AIlice 构建了一个 “文本计算机”…

相机标定实验

相机标定 文章目录 相机标定1 ROS标定1.1安装标定程序1.2 下载标定板1.3 标定1.4 标定结果 2 Kalibr相机标定2.1 下载官方提供的标定板2.2 自定义标定板2.3 cam数据录制2.4 标定2.5 输出结果 3 MATLAB标定3.1 打开工具3.2 添加标定板图片3.3 设置标定参数3.4 生成标定结果3.5 标…

GIT 卸载干净(图文详解)

一、控制面板卸载 右击卸载 等待卸载过程 二、在环境变量&#xff0c;把相关信息删除干净

WPF 窗口常用命令 / 属性

1、ResizeMode&#xff08;大小调整模式&#xff09;属性 NoResize &#xff1a;窗口大小不可调节&#xff0c;同时没有最大最小按钮&#xff1b; CanMinimize&#xff1a;不可调节。但可以最小化&#xff1b;&#xff08;此时最大化按钮不可用&#xff09; CanResize&#…

微服务架构中实体类模块化设计与MyBatis-Plus注解浅析

引言 在微服务开发过程中&#xff0c;为了保证代码的整洁性和可维护性&#xff0c;我们通常会将VO&#xff08;视图值对象&#xff09;、DTO&#xff08;数据传输对象&#xff09;、DO&#xff08;领域对象&#xff09;等实体类独立组织成一个API模块。这样做的目的是实现代码…

官网:随便搞个?那不如不搞,搞不好就给公司减分了。

官网建设确实需要认真对待&#xff0c;不能随便搞。一个粗制滥造的官网可能会给公司带来负面影响&#xff0c;降低品牌形象和用户体验。以下是一些官网建设的重要原则&#xff1a; 专业性&#xff1a;官网应该展示公司的专业性和专业知识。它应该以专业的设计、内容和功能来展示…

【电路笔记】-NPN晶体管

NPN晶体管 文章目录 NPN晶体管1、概述2、双极NPN晶体管配置3、NPN晶体管中的α和β关系4、示例5、共发射极配置1、概述 NPN 晶体管是三端三层器件,可用作放大器或电子开关。 在前面的文章中,我们看到标准双极晶体管或 BJT 有两种基本形式。 NPN(负-正-负)配置和PNP(正-负…

Nginx启动服务

Nginx启动服务 一、启动前置 下载地址 如已安装Docker&#xff0c;下一步拉取Nginx最新的Docker镜像&#xff1a; docker pull nginx:latest查看拉取下来的镜像&#xff1a; docker images二、启动服务 创建Docker容器&#xff1a; docker run --name {projectname} -p 80…

spring-jpa

一、介绍 1.1ORM 1.2 Java Persistence API 放在javaee版本 优点 支持持久化复杂的Java对象&#xff0c;简化Java应用的对象持久化开发支持使用JPQL语言进行复杂的数据查询使用简单&#xff0c;支持使用注解定义对象关系表之间的映射规范标准化&#xff0c;由Java官 方统一规…

自封装 bind 方法(二)

因为 bind 的使用方法是 某函数.bind(某对象&#xff0c;...剩余参数) 所以需要在 Function.prototype 上进行编程将传递的参数中的某对象和剩余参数使用 apply 的方式在一个回调函数中执行即可要在第一层获取到被绑定函数的 this&#xff0c;因为要拿到那个函数用 apply /***…

Asp .Net Core 系列:Asp .Net Core 集成 Newtonsoft.Json

简介 Newtonsoft.Json是一个在.NET环境下开源的JSON格式序列化和反序列化的类库。它可以将.NET对象转换为JSON格式的字符串&#xff0c;也可以将JSON格式的字符串转换为.NET对象。这个类库在.NET开发中被广泛使用&#xff0c;因为它功能强大、易于使用&#xff0c;并且有良好的…

【Spring Cloud 2023】【ZooKeeper】配置中心

【Spring Cloud 2023】【ZooKeeper】配置中心 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是…

一个系列很多样式的wordpress外贸建站模板

菌菇干货wordpress跨境电商模板 食用菌、羊肚菌、牛肝菌、香菇、干黄花菜、梅干菜、松茸wordpress跨境电商模板。 https://www.jianzhanpress.com/?p3946 餐饮调味wordpress跨境电商模板 豆制品、蛋黄糖、烘焙、咖啡、调料、调味酱、餐饮调味wordpress跨境电商模板。 http…

如何将 ONLYOFFICE 协作空间部署到 Kubernetes / OpenShift 集群中

需要 ONLYOFFICE 协作空间的可扩展实例吗&#xff1f;使用 Helm 轻松将其安装到 Kubernetes 或 OpenShift 集群中。阅读本文了解详情。 ONLYOFFICE 协作空间是什么 ONLYOFFICE 协作空间是一个协同办公平台&#xff0c;能够帮助用户更好地与客户、业务合作伙伴、承包商及第三方…

响应式编程五股票订阅系统实现

响应式编程五 使用StepVerifier测试响应式流StepVerifier要点 使用StepVerifier进行高级测试股票订阅系统数据库表 使用StepVerifier测试响应式流 出于测试目的&#xff0c;Reactor 提供了额外的 reactor-test 模块&#xff0c;该模块提供了 StepVerifier。StepVerifier 提供了…

Easticsearch性能优化之索引优化

Easticsearch性能优化之索引优化 一、合理的索引设计二、合理的分片和副本三、合理的索引设置 对于性能优化&#xff0c;Elasticsearch&#xff08;以下简称ES&#xff09;的索引优化是提高性能的关键因素之一。合理的设计索引&#xff0c;合理的分片和副本以及合理的缓存设置等…