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.hqwc.cn/news/520085.html

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

相关文章

王道机试C++第 3 章 排序与查找:排序问题 Day28(含二分查找)

查找 查找是另一类必须掌握的基础算法&#xff0c;它不仅会在机试中直接考查&#xff0c;而且是其他某些算法的基础。之所以将查找和排序放在一起讲&#xff0c;是因为二者有较强的联系。排序的重要意义之一便是帮助人们更加方便地进行查找。如果不对数据进行排序&#xff0c;…

线性代数笔记13--正交向量和正交子空间

0. 四个子空间 1. 正交向量 两向量点乘为0&#xff0c;向量正交。 A ⊤ B 0 A^{\top}B0 A⊤B0 勾股定理 ∣ ∣ x ∣ ∣ 2 ∣ ∣ y 2 ∣ ∣ ∣ ∣ x y ∣ ∣ 2 ||x||^2||y^2||||xy||^2 ∣∣x∣∣2∣∣y2∣∣∣∣xy∣∣2 验证正交条件 ∣ ∣ x ∣ ∣ 2 x ⊤ x x x ⊤ ∣…

Qt ini配置文件

ini文件用于保存用户的设置操作&#xff0c;下列以背景颜色设置为例子 暂时默认设置为白色背景 这段代码放置在主窗口的构造函数中&#xff0c;用于初始化读取ini文件 QString color;QSettings *set new QSettings("color.ini",QSettings::IniFormat);set->begi…

Python语言基础与应用-北京大学-陈斌-P32-31-计算和控制流-上机练习:创建并调用函数-字符集合的并集-上机代码

Python语言基础与应用-北京大学-陈斌-P32-31-计算和控制流-上机练习&#xff1a;创建并调用函数-字符集合的并集-上机代码 本文环境&#xff1a; win10 Thonny4.1.4 # 函数训练字符集合的并集 def my_union(str1,str2):list1 []list2 []i 0 while i < len(str1):lis…

OpenAI官方发文:对于马斯克起诉Opanai的看法

双方立场 马斯克的观点&#xff1a;投入资金将OpenAi并入特斯拉&#xff0c;实现从非盈利组织到盈利组织的转变。 OpenAi的观点&#xff1a;OpenAI 的使命是确保 AGI 惠及全人类&#xff0c;需要筹集资金搞研发&#xff0c;以非盈利组织模式运营&#xff0c;不急于实现盈利。盈…

钉钉群内自定义机器人发送消息功能实现

文章目录 钉钉群内自定义机器人发送消息功能实现1、设置webhook自定义机器人2、查看官方文档&#xff0c;使用open api3、编写业务代码4、发送成功结果如下 钉钉群内自定义机器人发送消息功能实现 1、设置webhook自定义机器人 设置关键词 添加完成后&#xff0c;获得改机器人的…

为什么 JavaScript 中的 0.1 + 0.2 不等于 0.3

本文作者为 360 奇舞团前端开发工程师 在使用 JavaScript 处理运算时&#xff0c;有时会碰到数字运算结果不符合预期的情况&#xff0c;比如经典的 0.1 0.2 不等于 0.3。当然这种问题不只存在于 JavaScript&#xff0c;不过编程语言的一些原理大致相通&#xff0c;我以 JavaSc…

Matter 笔记1-环境准备,编译

不要远程登录Ubuntu输入以下命令&#xff0c;原因&#xff1a;ubuntu/linux上的http代理设置 1. 准备 1.1 工具 Ubuntu 22.04 LTSClash 里General的端口设置到ubuntu 的网络设置里 1.2 代码 这里使用芯科整理过的代码 git clone https://github.com/SiliconLabs/matter.…

Linux:kubernetes(k8s)探针ReadinessProbe的使用(9)

本章yaml文件是根据之前文章迭代修改过来的 先将之前的pod删除&#xff0c;然后使用下面这个yaml进行生成pod apiVersion: v1 # api文档版本 kind: Pod # 资源对象类型 metadata: # pod相关的元数据&#xff0c;用于描述pod的数据name: nginx-po # pod名称labels: # pod的标…

Requests教程-15-文件上传与下载

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节&#xff0c;我们学习了requests的HTTPS请求方法&#xff0c;本小节我们讲解一下在requests文件上传与下载。 文件上传 使用requests库上传文件时&#xff0c;需要使用files参数&#xff0c;并将文件打…

仪酷LabVIEW OD实战(4)——Object Detection+OpenVINO工具包快速实现yolo目标检测

‍‍&#x1f3e1;博客主页&#xff1a; virobotics(仪酷智能)&#xff1a;LabVIEW深度学习、人工智能博主 &#x1f384;所属专栏&#xff1a;『仪酷LabVIEW目标检测工具包实战』 &#x1f4d1;上期文章&#xff1a;『仪酷LabVIEW OD实战(3)——Object Detectiononnx工具包快速…

Python(38):Request的data需入参是json,用转换json.dumps(data)

Python接口自动化测试遇到问题:误传str类型给request 接口请求数据用str传参报错&#xff0c;请求响应报错 排查原因&#xff1a;查看服务器报错是Json解析报错。 1.1、如果直接入参&#xff0c;进行request请求的数据&#xff1a; data请求值为&#xff1a; reqData {&quo…