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://www.mzph.cn/news/702405.shtml

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

相关文章

【生活】浅浅记录

各位小伙伴们好鸭,今天不是技术文章,浅浅记录一下最近几个月的收获😊 新的一年,一起努力,加油加油!

tinymce问题处理

Vite构建工具下Tinymce踩坑指南 解决方案是在路劲前面增加/,这个跟上面链接有些区别,区别原因应该是如果路由采用的是createWebHashHistory则应该去掉/,如果是createWebHistory则应该加上/ 页面引用,一种异步加载,一种同步加载&…

LeetCode 热题 100 | 二叉树(二)

目录 1 543. 二叉树的直径 2 102. 二叉树的层序遍历 3 108. 将有序数组转换为二叉搜索树 菜鸟做题,语言是 C 1 543. 二叉树的直径 这道题和 124. 二叉树中的最大路径和 太像了 题眼:二叉树的 直径 是指树中任意两个节点之间 最长路径的长度 。…

JS基础(三)-操作和流程控制

一 操作网页元素的步骤 1. 查找网页元素 给标签设置id属性&#xff0c;一个网页中的id值不允许重复 <button id"btn">按钮</button> 2. 给按钮绑定事件&#xff0c;监听用户操作 btn.onclick function(){ 一旦监听到用户的…

人工智能 — 特征选择、特征提取、PCA

目录 一、特征选择1、定义2、原因3、做法4、生成过程5、停止条件 二、特征提取三、PCA 算法1、零均值化&#xff08;中心化&#xff09;2、方差3、协方差4、协方差矩阵5、对协方差矩阵求特征值、特征矩阵6、对特征值进行排序7、评价模型8、代码实现9、sklearn 库10、鸢尾花实例…

【数据结构与算法(Java版)】深度剖析二分查找算法

【二分查找算法】的时间复杂度为O(log n)&#xff0c;其中n为数组的长度。因为每次查找都将查找范围缩小一半&#xff0c;所以算法的时间复杂度是对数级别的。 目录 前言 二分查找算法是什么&#xff1f; 算法实现 方式一&#xff1a;&#xff08;左闭右闭&#xff09; 文…

电机控制常见的外围器件

小型断路器&#xff1a; 这些通通都叫小型断路器&#xff0c;二十年的老电工不一定都认识&#xff0c;不信看看_哔哩哔哩_bilibili 1PIN 2PIN 3PIN 4PIN: 正常情况下火线和零线的电流是相等的&#xff0c;但是漏电的情况下&#xff0c;两线的电流差值大于30毫安&#xff0c;漏…

合纵连横 – 以 Flink 和 Amazon MSK 构建 Amazon DocumentDB 之间的实时数据同步

在大数据时代&#xff0c;实时数据同步已经有很多地方应用&#xff0c;包括从在线数据库构建实时数据仓库&#xff0c;跨区域数据复制。行业落地场景众多&#xff0c;例如&#xff0c;电商 GMV 数据实时统计&#xff0c;用户行为分析&#xff0c;广告投放效果实时追踪&#xff…

笔记本hp6930p安装Android-x86避坑日记

一、序言 农历癸卯年前大扫除&#xff0c;翻出老机hp6930p&#xff0c;闲来无事&#xff0c;便安装Android-x86玩玩&#xff0c;期间多次入坑&#xff0c;随手记之以避坑。 笔记本配置&#xff1a;T9600,4G内存&#xff0c;120G固态160G机械硬盘 二、Android-x86系统简介 官…

2023最新盲盒交友脱单系统源码

源码获取方式 搜一搜&#xff1a;万能工具箱合集 点击资源库直接进去获取源码即可 如果没看到就是待更新&#xff0c;会陆续更新上 或 源码软件库 最新盲盒交友脱单系统源码&#xff0c;纸条广场&#xff0c;单独抽取/连抽/同城抽取/高质量盒子 新增功能包括心动推荐&#xff…

备考2024年高考全国甲卷文科数学:历年选择题真题练一练

距离2024年高考还有三个多月的时间&#xff0c;最后这个时间&#xff0c;同学们基本上是以刷题为主。刷题的时候最重要的是把往年的真题吃透&#xff0c;因为真题是严格按照考纲出的&#xff0c;掌握了真题后面的知识点&#xff0c;并能举一反三地运用&#xff0c;那么高考的高…

用Python Matplotlib画图导致paper中含有Type-3字体,如何解决?

用Python Matplotlib画图导致paper中含有Type-3字体&#xff0c;如何解决&#xff1f; 在提交ACM或者IEEE论文之前&#xff0c;都会有格式的检查&#xff0c;格式的其中一个要求是paper中不能含有Type-3的字体。因为Type-1和True Type字体都是矢量字体&#xff0c;而Type-3并不…

老杨说运维 | 运维大数据价值探索

文末附有视频 伴随第六届双态IT乌镇用户大会的圆满完成&#xff0c;擎创科技“一体化数智管理和大模型应用”主题研讨会也正式落下了帷幕。 云原生转型正成为很多行业未来发展战略&#xff0c;伴随国家对信创数字化要求的深入推进&#xff0c;面对敏稳共存这一近年出现的新难…

MySQL死锁产生的原因和解决方法

一.什么是死锁 要想知道MYSQL死锁产生的原因,就要知道什么是死锁?在了解什么是死锁之前,先来看一个概念:线程安全问题 1.线程安全问题 1.1什么是线程安全问题 线程安全问题&#xff0c;指的是在多线程环境当中&#xff0c;线程并发访问某个资源&#xff0c;从而导致的原子性&a…

RocketMQ快速实战以及集群架构原理详解

RocketMQ快速实战以及集群架构原理详解 组成部分 启动Rocket服务之前要先启动NameServer NameServer 提供轻量级Broker路由服务&#xff0c;主要是提供服务注册 Broker 实际处理消息存储、转发等服务的核心组件 Producer 消息生产者集群&#xff0c;通常为业务系统中的一个功…

板块二 JSP和JSTL:第四节 EL表达式 来自【汤米尼克的JAVAEE全套教程专栏】

板块二 JSP和JSTL&#xff1a;第四节 EL表达式 一、什么是表达式语言二、表达式取值&#xff08;1&#xff09;访问JSP四大作用域&#xff08;2&#xff09;访问List和Map&#xff08;3&#xff09;访问JavaBean 三、 EL的各种运算符&#xff08;1&#xff09;.和[ ]运算符&…

汇编语言与接口技术实践——秒表

1. 设计要求 基于 51 开发板,利用键盘作为按键输入,将数码管作为显示输出,实现电子秒表。 功能要求: (1)计时精度达到百分之一秒; (2)能按键记录下5次时间并通过按键回看 (3)设置时间,实现倒计时,时间到,数码管闪烁 10 次,并激发蜂鸣器,可通过按键解除。 2. 设计思…

抖音数据抓取工具|短视频下载工具|视频内容提取软件

一、开发背景&#xff1a; 随着抖音平台的流行&#xff0c;越来越多的人希望能够下载抖音视频以进行个人收藏或分享。然而&#xff0c;目前在网上找到的抖音视频下载工具功能单一&#xff0c;操作繁琐&#xff0c;无法满足用户的需求。因此&#xff0c;我们决定开发一款功能强大…

java面试题之mysql篇

1、数据库索引 ​​​​​​​ 索引是对数据库表中一列或多列的值进行排序的一种结构&#xff0c;使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她&#xff0c;则与在表中搜索所有的行相比&#xff0c;索引有助于更快地获取信息。 索引的一个主要…

音视频开发之旅(69)-SD图生图

目录 1. 效果展示 2. ControlNet介绍 3. 图生图流程浅析 4. SDWebui图生图代码流程 5. 参考资料 一、效果展示 图生图的应用场景非常多&#xff0c;比较典型的应用场景有风格转化&#xff08;真人与二次元&#xff09;、线稿上色、换装和对图片进行扩图等&#xff0c;下面…