Python|蓝桥杯进阶第二卷——贪心

news2025/7/29 15:16:40

在这里插入图片描述

欢迎交流学习~~


专栏: 蓝桥杯Python组刷题日寄


蓝桥杯进阶系列:

🏆 Python | 蓝桥杯进阶第一卷——字符串
🔎 Python | 蓝桥杯进阶第二卷——贪心
💝 Python | 蓝桥杯进阶第三卷——动态规划(待续)
✈️ Python | 蓝桥杯进阶第四卷——图论(待续)
🌞 Python | 蓝桥杯进阶第五卷——数论(待续)
🌠 Python | 蓝桥杯进阶第六卷——递归(待续)
💎 Python | 蓝桥杯进阶第七卷——搜索(待续)

Python|蓝桥杯进阶第二卷——贪心

  • 🎁 发工资喽
  • 🌲 翻硬币
  • 🚀 Huffuman树
  • 💡 打水问题
  • 🍞 排队打水问题


🎁 发工资喽

题目:
时间限制:
1s

内存限制:
128MB

题目描述:
作为程序猿,最盼望的日子就是每月的9号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵
但是对于公司财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小李最近就在考虑一个问题:如果每个员工的工资额都知道,最少需要准备多少张人民币,才能在给每位员工发工资的时候都不用员工找零呢?
这里假设程序猿的工资都是正整数,单位元,人民币一共有 100 元、50 元、10 元、5 元、2 元和 1 元六种。

输入描述:
输入数据包含多个测试实例,每个测试实例的第一行是一个整数n(n<100),表示员工的人数,然后是 n 个员工的工资。
n=0 表示输入的结束,不做处理。

输出描述:
对于每个测试实例输出一个整数 x,表示至少需要准备的人民币张数。每个输出占一行。

样例输入:

3 1 2 3
0

样例输出:
4


解题思路

贪心,从面值最大的开始选取,直到满足条件。

参考代码

def func(amount):
    count1, temp = divmod(amount, 100)
    count2, temp = divmod(temp, 50)
    count3, temp = divmod(temp, 10)
    count4, temp = divmod(temp, 5)
    count5, temp = divmod(temp, 2)
    total = count1 + count2 + count3 + count4 + count5 + temp
    return total

while True:
    try:
        nums = list(map(int, input().split()))
        n = nums[0]
        if n != 0:
            count = 0
            for i in range(n):
                count += func(nums[i+1])
            print(count)
    except:
        break

🌲 翻硬币

题目:
时间限制:
1s

内存限制:
128MB

题目描述:
小明正在玩一个“翻硬币”的游戏。
桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。
比如,可能情形是:**oo***oooo
如果同时翻转左边的两个硬币,则变为:oooo***oooo
现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
我们约定:把翻动相邻的两个硬币叫做一步操作。

输入描述:
两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度 <1000

输出描述:
一个整数,表示最小操作步数。

样例输入:

*o**o***o*** 
*o***o**o*** 

样例输出:
1


解题思路

从左到右遍历,如果对应位置两状态不同,就进行翻转,计数。

参考代码

start = list(input())
end = list(input())
L = len(start)
count = 0

for i in range(L):
    if start[i] != end[i]:
        start[i] = 'o' if start[i] == '*' else '*'
        start[i+1] = 'o' if start[i+1] == '*' else '*'
        count += 1

print(count)

🚀 Huffuman树

题目:
时间限制:
3s

内存限制:
192MB

题目描述:
Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。

给出一列数 {pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下:

  1. 找到 {pi} 中最小的两个数,设为 papb,将 papb{pi} 中删除掉,然后将它们的和加入到 {pi} 中。这个过程的费用记为 pa + pb

  2. 重复步骤1,直到 {pi} 中只剩下一个数。

在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。

本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。

例如,对于数列 {pi}={5, 3, 8, 2, 9},Huffman树的构造过程如下:

  1. 找到 {5, 3, 8, 2, 9} 中最小的两个数,分别是 23,从 {pi} 中删除它们并将和 5 加入,得到 {5, 8, 9, 5},费用为 5

  2. 找到 {5, 8, 9, 5} 中最小的两个数,分别是 55,从 {pi} 中删除它们并将和 10 加入,得到{8, 9, 10},费用为 10

  3. 找到 {8, 9, 10} 中最小的两个数,分别是 89,从 {pi} 中删除它们并将和 17 加入,得到 {10, 17},费用为 17

  4. 找到 {10, 17} 中最小的两个数,分别是 1017,从 {pi} 中删除它们并将和 27 加入,得到 {27},费用为 27

  5. 现在,数列中只剩下一个数 27,构造过程结束,总费用为 5+10+17+27=59

输入描述:
输入的第一行包含一个正整数 n(n< =100)

接下来是 n 个正整数,表示 p0, p1, …, pn-1,每个数不超过 1000

输出描述:
输出用这些数构造Huffman树的总费用。

样例输入:

5 
5 3 8 2 9

样例输出:
59


解题思路

排序后循环 n-1 次,每次选出前两个(最小值),计算其和后,再加入列表中,并将这两个最小值删除。

参考代码

n = int(input())
nums = list(map(int, input().split()))
res = 0
nums.sort()

for i in range(n-1):
    total = nums[0] + nums[1]
    nums.append(total)
    res += total
    nums.pop(0)
    nums.pop(0)
    nums.sort()
print(res)

💡 打水问题

题目:
时间限制:
1s

内存限制:
128MB

题目描述:
N 个人要打水,有 M 个水龙头,第 i 个人打水所需时间为 Ti,请安排一个合理的方案使得所有人的等待时间之和尽量小。

提示:
一种最佳打水方案是,将 N 个人按照 Ti 从小到大的顺序依次分配到 M 个龙头打水。
例如样例中,Ti 从小到大排序为 1,2,3,4,5,6,7,将他们依次分配到 3 个龙头,则去龙头一打水的为1,4,7;去龙头二打水的为2, 5;去第三个龙头打水的为 3, 6
第一个龙头打水的人总等待时间 = 0 + 1 + (1 + 4) = 6
第二个龙头打水的人总等待时间 = 0 + 2 = 2
第三个龙头打水的人总等待时间 = 0 + 3 = 3
所以总的等待时间 = 6 + 2 + 3 = 11

输入描述:
第一行两个正整数 N M 接下来一行 N 个正整数 Ti
N,M< =1000,Ti< =1000

输出描述:
最小的等待时间之和。(不需要输出具体的安排方案)

样例输入:

7 3
3 6 1 4 2 5 7

样例输出:
11


解题思路

排序后直接计算。

参考代码

n, m = map(int, input().split())
t = list(map(int, input().split()))
t.sort()
res = 0
# 只有 n-m 个要等待
for i in range(0, n-m):
    t[i+m] += t[i]
    res += t[i]
print(res)

🍞 排队打水问题

题目:
时间限制:
1s

内存限制:
128MB

题目描述:
n 个人排队到 r 个水龙头去打水,他们装满水桶的时间 t1、t2………..tn 为整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少?

输入描述:
第一行 n,r (n< =500,r< =75)
第二行为 n 个人打水所用的时间 Ti (Ti< =100)

数据规模和约定
其中 80% 的数据保证 n< =10

输出描述:
最少的花费时间

样例输入:

3 2
1 2 3

样例输出:

7

解题思路

假设多了 m 个打水时间为 0 的人,此时需要可以转化为前一个问题,此时有 n 个需要等待的人。

参考代码

n, m = map(int, input().split())
t = list(map(int, input().split()))
t.sort()
res = 0
# 要计算总花费时间,我们可以假设多了 m 个打水时间为0的人
t += [0 for i in range(m)]
# 即计算n个等待的人
for i in range(0, n):
    t[i+m] += t[i]
    res += t[i]
print(res)

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

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

相关文章

关于信息安全认证CISP、PTE对比分析

CISP 注册信息安全专业人员 CISP-PTE 注册渗透测试工程师&#xff08;以下简称PTE&#xff09; 1 、发证机构 CISP与PTE的发证机构都是中国信息安全测评中心&#xff0c;政府背景给认证做背书&#xff0c;学员信息都在中国政府可控的机构手中&#xff1b; 如果想在政府、国…

TryHackMe-Tardigrade(应急响应)

Tardigrade 您能否在此 Linux 端点中找到所有基本的持久性机制&#xff1f; 服务器已遭到入侵&#xff0c;安全团队已决定隔离计算机&#xff0c;直到对其进行彻底清理。事件响应团队的初步检查显示&#xff0c;有五个不同的后门。你的工作是在发出信号以使服务器恢复生产之前…

MyBatis源码分析(七)MyBatis与Spring的整合原理与源码分析

文章目录写在前面一、SqlSessionFactoryBean配置SqlSessionFactory1、初识SqlSessionFactoryBean2、实现ApplicationListener3、实现InitializingBean接口4、实现FactoryBean接口5、构建SqlSessionFactory二、SqlSessionTemplate1、初始SqlSessionTemplate2、SqlSessionTemplat…

这个WPF DataGrid组件,可以让业务数据管理更轻松!(Part 2)

DevExpress WPF的DataGrid组件是专用于WPF平台的高性能XAML网格控件&#xff0c;该组件附带了几十个具有高影响力的功能&#xff0c;使开发者可以轻松地管理数据并根据也无需要在屏幕上显示数据。在上文中&#xff08;点击这里回顾>>&#xff09;为大家介绍了DevExpress …

HTTPS详解(原理、中间人攻击、CA流程)

摘要我们访问浏览器也经常可以看到https开头的网址&#xff0c;那么什么是https&#xff0c;什么是ca证书&#xff0c;认证流程怎样&#xff1f;这里一一介绍。原理https就是httpssl&#xff0c;即用http协议传输数据&#xff0c;数据用ssl/tls协议加密解密。具体流程如下图&am…

企业级信息系统开发学习笔记1.8 基于Java配置方式使用Spring MVC

文章目录零、本节学习目标一、基于Java配置与注解的方式使用Spring MVC1、创建Maven项目 - SpringMVCDemo20202、在pom.xml文件里添加相关依赖3、创建日志属性文件 - log4j.properties4、创建首页文件 - index.jsp5、创建Spring MVC配置类 - SpringMvcConfig6、创建Web应用初始…

C++基础了解-02-C++ 数据类型

C 数据类型 一、C 数据类型 使用编程语言进行编程时&#xff0c;需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着&#xff0c;当创建一个变量时&#xff0c;就会在内存中保留一些空间。 可能需要存储各种数据类型&#xff08;比如字符型、宽…

JDK如何判断自己是什么公司的

0x00 前言 因为一些事情&#xff0c;遇到了这样一个问题&#xff0c;JDK如何判断自己是什么公司编译的。因为不同的公司编译出来&#xff0c;涉及到是否商用收费的问题。 平时自己使用的时候&#xff0c;是不会考虑到JDK的编译公司是哪一个&#xff0c;都是直接拿起来用&#…

windows下安装emqx Unable to load emulator DLL@if ===/ SET data_dir=“

1.报错内容 I:\0-software\02-emqx\emqx-5.0.19-windows-amd64\bin>emqx start Unable to load emulator DLL (I:\0-software\02-emqx\emqx-5.0.19-windows-amd64\erts-12.3.2.9\bin\beam.smp.dll) 此时不应有 SET。 I:\0-software\02-emqx\emqx-5.0.19-windows-amd64\bin&…

格密码学习笔记(四):格上公认难题

文章目录最短向量问题最近向量问题最短线性无关向量问题基于格的可靠信息传输CVP问题的两种版本ADD问题规约到SIVP问题上致谢最短向量问题 格的每个量都定义了一个对应的计算问题。对于第一连续极小λ1\lambda_1λ1​而言&#xff0c;其对应的计算问题为最短向量问题。 定义 …

idea 2020 常用配置

激活步骤 本机环境信息如下 名称版本操作系统MacOS Mojave 10.14.6IDEAUltimate 2020.3激活时间2023/03/07 更新 Reposity 【Intellij IDEA】- 【Preferences…】- 【Plugins】- 【Manage Plugin Repositories】 添加新的repository https://plugins.zhile.io下载 Eval Re…

java进阶—线程安全问题

线程安全问题&#xff0c;就涉及到一个资源共享&#xff0c;资源共享很好理解&#xff0c;就是多个线程同时操作一个资源池 就比如&#xff0c;快五一了&#xff0c;12306 购票&#xff0c;假设从北京到上海的 高铁票 一共只有200 张&#xff0c;现在3个人同时在线抢票&#x…

【ONE·C || 程序编译简述】

总言 C语言&#xff1a;程序编译相关。    文章目录总言1、程序的翻译环境和运行环境1.1、简述1.2、翻译环境&#xff1a;程序编译与链接1.2.1、简介&#xff1a;程序如何从.c文件形成.exe可执行程序1.2.2、过程说明1.3、运行环境2、预处理详解2.1、预定义符号2.2、#define2.…

参考文献怎么查找,去哪里查找?一篇文章讲明白这些问题

在我们撰写论文查找参考文献时&#xff0c;往往不知道从哪里入手&#xff0c;本文小编就针对下面这三个方面给大家详细讲解下&#xff1a; 一、查找参考文献方法 二、参考文献资料查找网站 三、参考文献格式规范 一、查找参考文献方法&#xff1a; 1、知网全球最大的中文数据…

DBeaver连接mysql、oracle数据库

1. DBeaver连接mysql 1&#xff09; 下载DBeaver https://dbeaver.io/download/&#xff0c;并安装 2) 新建数据库连接 3&#xff09;选择mysql驱动程序 4&#xff09;填写连接设置内容 5&#xff09;点击 “编辑驱动设置”&#xff0c;并填写相关信息 6&#xff09;选择本地…

九龙证券|朝着双向开放稳步前进――从沪深港通全面扩容看资本市场对外开放

2023年春天的资本商场&#xff0c;高水平双向敞开的步履益发铿锵。 伴随着沪深买卖所互联互通股票标的规划扩展规矩正式对外发布&#xff0c;3月13日&#xff0c;内地与香港资本商场行将迎来史上最大规划双向扩容——沪深股通标的股票合计将添加1034只&#xff0c;调整后沪股通…

Web前端学习:六 -- 练习小总结

1、背景颜色透明度写法&#xff1a; background&#xff1a;rgba(R&#xff0c;G&#xff0c;B&#xff0c;Alpha透明度) 透明度范围&#xff1a;0–1&#xff0c;1完全不透明&#xff0c;0完全透明 2、伪类 hovar&#xff1a; 当鼠标接触该元素是&#xff0c;显示另一种样…

安恒信息java实习面经

目录1.Java ME、EE、SE的区别&#xff0c;Java EE相对于SE多了哪些东西&#xff1f;2.jdk与jre的区别3.说一下java的一些命令&#xff0c;怎么运行一个jar包4.简单说一下java数据类型及使用场景5.Map跟Collection有几种实现&#xff1f;6.面向对象的特性7.重载和重写的区别8.重…

ElasticSearch 在Java中的各种实现

ES JavaAPI的相关体系&#xff1a; 词条查询 所谓词条查询&#xff0c;也就是ES不会对查询条件进行分词处理&#xff0c;只有当词条和查询字符串完全匹配时&#xff0c;才会被查询到。 等值查询-term 等值查询&#xff0c;即筛选出一个字段等于特定值的所有记录。 【SQL】 s…

工业物联网“杀手级”应用—预测性维护

一、预测性维护的必要性 随着新一轮科技革命和产业变革的兴起&#xff0c;工业物联网、大数据、人工智能等技术正与经济社会各领域加速渗透融合。由于市场竞争对精细化成本管控的要求&#xff0c;设备的重要性越来越凸显&#xff0c;设备的维护对策也必然从响应式维护&#xf…