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

今日复习计划:做复习题

例题1:大石头的搬运工

问题描述:

在一款名为“大石头的搬运工”的游戏中,玩家需要 操作一排n堆石头,进行n - 1轮游戏。

每一轮,玩家可以选择一堆石头,并将其移动到任意位置。

在n - 1轮游戏移动结束时,要求将所有的石头移动到一起(即所有石头的位置相同)即为成功。

移动的费用为石头的重量乘以移动的距离。例如,如果一堆重量为2的石头从位置3移动到位置5,那么费用为2 * (5 - 3) = 4.

请计算出所有合法方案中,将所有石头移动到一起时的最少费用。

可能有多堆石头在一个位置上,但是一轮只能选择移动其中一堆。

输入格式:

第一行一个整数n,表示石头的数量。

接下来n行,每行两个整数wi和pi,分别表示第i个石头的重量和初始位置。

输出格式:

输出一个整数,表示最小的总移动费用。

参考答案:

import math
n = int(input())
li = []
for i in range(n):li.append(list(map(int,input().split())))
li.sort(key = lambda x:x[1])
pre = [0]
nex = [0]
s1 = li[0][0]
s2 = li[-1][0]
for i in range(1,n):pre.append(pre[-1] + (s1)*(li[i][1] - li[i-1][1]))s1 += li[i][0]
for i in range(n-2,-1,-1):nex.append(nex[-1] + (s2)*(li[i+1][1] - li[i][1]))s2 += li[i][0]
nex.reverse()
res = math.inf
for i in range(n):res = min(res,pre[i] + nex[i])
print(res)

运行结果:

以下是我对此题的理解:

import math:

这行导入了python的math模块,用于进行数学计算。

n = int(input())

li = []

for i in range(n):li.append(list(map(int,input().split())))

首先,从标准输入读取一个整数n,表示石头的数量。然后,通过一个循环读取n行输入,每行包括两个整数wi和pi,分别表示第i个石头的重量和初始位置,这些信息以列表的形式存储在li中

li.sort(key = lambda x:x[1])

对列表li按初始位置进行排序,以便后续计算。

pre = [0]

nex = [0]

s1 = li[0][0]

s2 = li[-1][0]

初始化四个变量:pre,nex,s1,s2。pre和nex分别用于储存每个位置左侧和右侧的移动总费用,而s1和s2分别表示左侧和右侧的石头重量之和的累加值,初始值分别为第一个和最后一个石头的重量。

for i in range(1,n):pre.append(pre[-1] + (s1)*(li[i][1] - li[i-1][1]))

s1 += li[i][0]

接下来,变量列表li中的每个石头,计算每个石头左侧的移动总费用。对于每个位置i,其左侧移动总费用等于前一个位置的左侧移动总费用加上当前位置的移动费用,其中移动费用等于当前位置当前位置左侧石头重量之和乘以当前位置与前一个位置的距离。更新s1为当前位置左侧的石头重量之和。

for i in range(1,n)

这个循环从1开始到n - 1结束,遍历除了第一个石头以外的所有石头。因为第一个石头的位置是我们用来初始化s1的起点,所以不需要再次计算它的移动费用

pre.append(pre[-1] + (s1)*(li[i][1] - li[i-1][1]))

这行代码是计算并存储到当前位置i为止,所以左侧石头移动到当前位置的总费用,pre[-1]是上一个位置的移动总费用,(s1)*(li[i][1] - li[i-1][1])是从上一个位置到当前位置的移动费用,其中s1是到当前位置为止,左侧所有石头的重量和,li[i][1] - li[i-1][1]是当前位置与上一个位置的距离。将这两者相加得到当前位置的总移动费用,并将其追加到pre列表中

s1 += li[i][0]

这行代码更新了s1的值。每遍历到一个新的位置,都将当前位置的石头重量加到s1上,因此s1始终保持为到当前位置为止,左侧所有石头的重量和。

for i in range(n - 2,-1,-1)

这个循环从倒数第二个石头开始向左遍历,直到第一个石头。因为最后一个石头的位置是我们用来初始化s2的起点,所以不需要再次计算它的移动费用

nex.append(nex[-1] + (s2)*(li[i + 1][1] - li[i][1]))

这行代码是计算并储存到当前位置i为止,所有右侧石头移动到当前位置的总移动费用,nex[-1]是上一个位置的总移动费用,(s2)*(li[i + 1][1] - li[i][1])是从上一个位置移动到当前位置的移动费用,其中s2是到当前位置为止,右侧所有石头的重量和,li[i + 1][1] - li[i][1]是当前位置与下一个位置之间的距离。将这两者相加得到当前位置的总移动费用,并将其追加到nex列表中。

s2 += li[i][0]:这行代码更新了s2的值,每遍历到一个新的位置,将当前石头的重量叠加到s2上,因此s2始终保持为到当前位置为止,右侧所有石头的重量和。

nex.reverse():最后,由于我们是从左向右计算移动费用的,得到的nex列表中元素的顺序与实际的位置顺序相反,所以需要将nex翻转过来,以便后续计算最小总移动费用是能够对应正确位置。


例题2:最大数组和

问题描述:

小明是一名勇敢的探险家,他在一次探险途中发现了一组神秘的宝石,这些宝石的价值都不同。但是,他发现这些宝石会随着时间的推移逐渐失去价值,因此他必须在规定的次数内对它们进行处理。

小明想要最大化这些宝石的总价值。他有两种处理方式:

1.选出最小的两个宝石,并将他们从宝石组中删除。

现在,给你小明手上的宝石组,请你告诉他在规定的次数内,最大化宝石的总价值是多少。

输入格式:

第一行包含一个整数t,表示数据组数。

对于每组数据,第一行包含两个整数n和k,表示宝石的数量和规定的处理次数。

第二行包含n个整数a1,a2,a3,...,an,表示每个宝石的价值。

输出格式:

对于每组数据,输入一个整数,表示在规定的次数内,最大化宝石的总价值。

参考答案:

import math
t = int(input())
for i in range(t):n,k = map(int,input().split())li = list(map(int,input().split()))li.sort()pex = [0]for i in range(n):pex.append(pex[-1] + li[i])ans = -math.inffor i in range(k + 1):ans = max(ans,pex[n - (k - i)] - pex[2 * i])print(ans)

运行结果:

 

以下是我对此题的理解:

1.输入

第一行输入一个整数t,表示数据组数

对于每组数据,第一行输入两个整数n和k,分别表示宝石的数量和规定的处理次数。

第二行输入n个整数,表示每个宝石的价值

2.数据处理

程序进入一个循环,循环t次,处理每组数据

对于每组数据,首先将宝石价值列表li进行排序,从小到大排序

3.计算累积和

创建一个列表pex,初始为[0]

然后,对排列后的宝石价值列表进行循环,计算累积和,并将结果存储在pex中

这样,pex中的第i个元素表示前i个宝石的总价值。

4.计算最大总价值

初始化ans为负无穷,表示初始时宝石总价值为最小值

对于处理次数k的所以可能值,从0到k,进行循环

计算当前处理次数下,剩余宝石的最大总价值

使用max函数更新ans,保留最大的总价值

5.输出结果

输出ans,即最大化宝石总价值的结果。

这道题使用了贪心算法的思想,在每次处理中选择了当前最优的方案,以求得最终的最优解。


OK,今天去做别的事情了,所以我只做了两个题,进度有点慢,明天得快一点。

下一篇继续!

 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

mapbox高德地图与相机

mapbox高德地图与相机 本案例使用Mapbox GL JavaScript库创建高德地图。 演示效果引入 CDN 链接地图显示 创建地图实例定义地图数据源配置地图图层 设置地图样式实现代码 1. 演示效果 2. 引入 CDN 链接 <script src"https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapb…

YOLOv9-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 Python&#xff1a;3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…

SQL注入漏洞解析--less-46

我们先看一下46关 他说让我们先输入一个数字作为sort,那我们就先输入数字看一下 当我们分别输入1&#xff0c;2&#xff0c;3可以看到按照字母顺序进行了排序&#xff0c;所以它便是一个使用了order by语句进行排序的查询的一种查询输出方式 当输入时出现报错提示&#xff0c;说…

编曲学习:和声小调 终止式 离调和弦 转调应用

和声小调 音阶 大调音程关系排列:全 全 半 全 全 全 半 小调音程关系排列:全 半 全 全 半 全 全 C大调音阶: 1 2 3 4 5 6 7 1 C小调音阶: 1 2 b3 4 5 b6 b7 1 C大调基本音级构成的和弦: Cmaj7 Dmin7 Emin7 Fmaj7 G7 Amin7 Bm7-5 C小调基本音级构成的和弦: Cmin7 D…

【书籍分享 • 第三期】虚拟化与容器技术

文章目录 一、本书内容二、读者对象三、编辑推荐四、前言4.1 云计算技术的发展4.2 KVM、Docker4.3 本书内容简介4.4 作者简介 五、粉丝福利 一、本书内容 《虚拟化与容器技术》通过深入浅出的方式介绍KVM虚拟化技术与Docker容器技术的概念、原理及实现方法&#xff0c;内容包括…

Linux中如何在创建子线程的时候设置为分离属性

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/types.h> #include<unistd.h> #include <pthread.h> void *mythread(void *arg) {printf("id[%ld]\n",pthread_self()); } int main() { //定义pthread_…

Vue <script setup>

目录 基本语法 顶层的绑定会被暴露给模板 响应式 使用组件 动态组件 递归组件 命名空间组件 使用自定义指令 defineProps() 和 defineEmits() 针对类型的 props/emit 声明 使用类型声明时的默认 props 值 顶层 await 限制 <script setup> 是在单文件组件 (S…

网络原理——HTTPS

HTTPS是 在HTTP的基础上&#xff0c;引入了一个加密层&#xff08;SSL)。 1. 为什么需要HTTPS 在我们使用浏览器下载一些软件时&#xff0c;相信大家都遇到过这种情况&#xff1a;明明这个链接显示的是下载A软件&#xff0c;点击下载时就变成了B软件&#xff0c;这种情况是运…

北斗卫星赋能,宠物定位新篇章—追踪宠物,不再是难题

北斗卫星赋能&#xff0c;宠物定位新篇章—追踪宠物&#xff0c;不再是难题 随着社会的快速发展与科技的不断进步&#xff0c;人们的生活方式也在不断改变。宠物已经成为越来越多家庭的重要成员&#xff0c;在这个宠爱宠物的时代&#xff0c;如何确保宠物的安全&#xff0c;特…

javaEE图书馆自习室订座系统信用springmvc+springboot+mybatis

研究的内容是设计和实现图书馆自习室系统&#xff0c;便捷广大师生对自习室的使用&#xff0c;协助图书馆自习室管理。在设计过程中&#xff0c;系统的用户角色和权限分配如下&#xff1a; &#xff08;1&#xff09;馆长 用户管理&#xff1a;拥有自习室管理员、普通用户的所有…

什么是气象站?

气象站&#xff0c;这个名字听起来可能有些陌生&#xff0c;但我们的生活却与之息息相关。 一、气象站的定义与功能 气象站是一个专门用于观测和记录天气现象的设施。通过收集各种气象数据&#xff0c;如温度、湿度、风速、风向、气压、降水量等&#xff0c;气象站为天气预报、…

10 Redis之SB整合Redis+ 高并发问题 + 分布式锁

7. SB整合Redis Spring Boot 中可以直接使用 Jedis 实现对 Redis 的操作&#xff0c;但一般不这样用&#xff0c;而是使用 Redis操作模板 RedisTemplate 类的实例来操作 Redis。 RedisTemplate 类是一个对 Redis 进行操作的模板类。该模板类中具有很多方法&#xff0c;这些方…

计算机设计大赛 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

千兆单口(百兆双口)小体积 24PIN 网络变压器 H82409S 特点

Hqst华轩盛(石门盈盛)电子导读&#xff1a;千兆单口&#xff08;百兆双口&#xff09;小体积 24PIN 网络变压器 H82409S 特点 大家好&#xff0c;石门盈盛电子科技有限公司工程盛先生&#xff0c;今天向大家介绍石门盈盛电子科技有限公司的一款优势产品 - 千兆单口&#xff08;…

查看cuda和cudnn版本

查看cuda 打开命令提示符&#xff08;Windows键 R&#xff0c;然后输入cmd并回车&#xff09;。输入nvcc --version或者nvcc -V来获取Cuda的版本信息。 查看cudnn版本 查看Cudnn版本&#xff1a; 进入Cuda安装目录&#xff0c;通常位于C:\Program Files\NVIDIA GPU Computi…

Linux系统---nginx(1)服务

目录 一.Nginx概述 1.定义 2.Nginx模块作用 &#xff08;1&#xff09;main模块 &#xff08;2&#xff09;stream服务模块 &#xff08;3&#xff09;邮件服务模块 &#xff08;4&#xff09;第三方模块 &#xff08;5&#xff09;events模块 &#xff08;6&#xff0…

Mac专用投屏工具AirServer 7.27 for Mac中文版2024最新图文教程

Mac专用投屏工具AirServer 7.27 for Mac中文版是一款适用于Mac的投屏工具&#xff0c;可以将Mac屏幕快速投影到其他设备上&#xff0c;如电视、投影仪、平板等。 Mac专用投屏工具AirServer 7.27 for Mac中文版具有优秀的兼容性&#xff0c;可以与各种设备配合使用。无论是iPhon…

数据结构:树/二叉树

一、树的概念 逻辑结构&#xff1a;层次结构&#xff0c;一对多 节点&#xff1a;树中的一个数据元素根节点&#xff1a;树中的第一个节点&#xff0c;没有父节点孩子节点&#xff1a;该节点的直接下级节点父(亲)节点&#xff1a;该结点的直接上级节点兄弟节点&#xff1a;有…

用友U8 Cloud KeyWordReportQuery SQL注入漏洞复现

0x01 产品简介 用友U8 Cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案 0x02 漏洞概述 用友U8 Cloud KeyWordReportQuery接口处存在SQL注入漏洞,未授权的攻击者可通过此漏洞获取数据库权限,从而盗取用户数据,造成用户信息泄露。…

D*算法超详解 (D星算法 / Dynamic A*算法/ Dstar算法)(死循环解决--跟其他资料不一样奥)

所需先验知识&#xff08;没有先验知识可能会有大碍&#xff0c;了解的话会对D*的理解有帮助&#xff09;&#xff1a;A*算法/ Dijkstra算法 何为D*算法 Dijkstra算法是无启发的寻找图中两节点的最短连接路径的算法&#xff0c;A*算法则是在Dijkstra算法的基础上加入了启发函数…