蓝桥杯备赛:贪心

2023-11-18

例题1:最少砝码:

问题描述
你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意 小于等于 NN 的正整数重量。

那么这套砝码最少需要包含多少个砝码?

注意砝码可以放在天平两边。

输入格式
输入包含一个正整数 N。

输出格式
输出一个整数代表答案。

样例输入
7
样例输出
3
样例说明
33 个砝码重量是 1、4、61、4、6,可以称出 11 至 77的所有重量。

1 = 1;1=1;

2 = 6 − 42=6−4(天平一边放 66,另一边放 44);

3 = 4 − 1;3=4−1;

4 = 4;4=4;

5 = 6 − 1;5=6−1;

6 = 6;6=6;

7 = 1 + 6;7=1+6;

少于 33 个砝码不可能称出 11 至 77​ 的所有重量。

评测用例规模与约定
对于所有评测用例,1 ≤ N ≤ 1000000000。

运行限制
最大运行时间:1s
最大运行内存: 512M 

思路:参考:第十二届蓝桥杯省赛-最少砝码C++-Dotcpp编程社区

因为本题要求的砝码的最少个数,因此我们可以采用贪心的思想来思考这道题目。

称出重量1时需要一个重量为1的砝码。

称重量2的时候在重量为1的砝码的基础上增加一个重量为3的砝码,至于为什么是三,是因为如果增加一个重量为3的砝码时可以称出来的重量为1,2,3,4。若果增加别的重量的砝码最后称出来的总重量的情况都比增加3要少。因此可以看出每次增加新的砝码时都要增加重量最大的砝码。

下面我们来继续往下推理来验证一下这种思想的正确性。

目前有重量为1和3的砝码,可以称出来1,2,3,4。

接下来该称5,此时增加重量最大的砝码应为9。增加9后,最大可称13,我们来看看5-12中间的数能不能求出来。

5=9-4

6=9-3

7=9-3+1

8=9-1

9=9

10=9+1

11=9+3-1

12=9+3

13=9+3+1

是可以的。

接下来该称14,此时增加重量最大的砝码应该为27。增加27后,最大可称40。14-40之间的数是完全可以由1,3,9,27三个砝码来称出来的。就不一一列举了。因此我们可以发现规律了,每次增加的砝码都是上一次增加的砝码重量乘以三。

砝码序号 砝码重量 最大可称重量
1 1 1
2 3 4
3 9 13
4 27 40

python代码:

n=int(input())
maxw=1
index=1
addw=1

while n>maxw:
      addw=addw*3
      index=index+1
      maxw=maxw+addw

print(index)

例题2:翻硬币

题目描述

小明正在玩一个“翻硬币”的游戏。

桌上放着排成一排的若干硬币。我们用  *  表示正面,用  o  表示反面(是小写字母,不是零)。

比如,可能情形是:**oo***oooo

如果同时翻转左边的两个硬币,则变为:oooo***oooo

现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

我们约定:把翻动相邻的两个硬币叫做一步操作。

输入

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

输出

一个整数,表示最小操作步数。 

样例输入

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

样例输出

1

这个题从两个字符串开始进行比较,不一样就翻转。这样求出来的就是最少翻动次数。

代码:

s=list(input())
s1=list(input())
a=['*','o']
ans=0
for i in range(len(s)-1):
     if s[i]==s1[i]:
          continue
     else:
          ans=ans+1
          tmp=a[1-a.index(s[i])]
          s[i]=tmp
          tmp1=a[1-a.index(s[i+1])]
          s[i+1]=tmp1
print(ans)

例题3:huffuman树

题目描述

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

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

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

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

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

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

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

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

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

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

4.  找到{10,  17}中最小的两个数,分别是10和17,从{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=int(input())
s=list(map(int,input().split()))
s.sort()
ans=0
for i in range(n-1):
     tmp=s[0]+s[1]
     ans=ans+tmp
     s.pop(0)
     s.pop(0)
     s.append(tmp)
     s.sort()
print(ans)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯备赛:贪心 的相关文章

随机推荐

  • G - Five-In-a-Row

    B Five In a Row time limit per test 1 second memory limit per test 256 megabytes input standard input output standard ou
  • 好长时间不看,php魔术变量又忘了,赶紧总结下

    看到了wordpress的这行代码想起来的 define WP USE THEMES true Loads the WordPress Environment and Template require dirname FILE wp blo
  • AsyncTask源码梳理及总结

    结合Android 7 0源码 全面解析AsyncTask的源码 梳理AsyncTask使用过程中的一些注意事项 分析源码之前 我们先来梳理一下使用 AsyncTask使用示例 public class MainActivity exten
  • VS Code-此时不应有 &

    描述 用vs code运行python代码时 报 此时不应有 解决方式 ctrl 调出终端 将默认终端设置成powershell 退出 重新加载代码
  • 《七天数据埋点之旅》第一天:初识埋点

    0x00 前言 本篇为 七天数据埋点之旅 的第一篇 通过阅读本篇 你将获得以下三方面的知识 什么是埋点 埋点的用途 埋点的分类 0x01 什么是埋点 数据埋点是数据采集的一种重要方式 主要用来记录和收集终端用户的操作行为 其基本原理是在Ap
  • 1.3端口扫描:利用Nmap工具进行端口扫描

    1 预备知识 Nmap介绍 nmap的功能 端口扫描 主机发现 服务 版本识别 操作系统识别 网络路由跟踪 Nmap脚本引擎 nmap的扫描方式 Half open scanning 默认扫描方式 TCP connect TCP ACK s
  • 正则匹配微信昵称

    x 4e00 x 9fa5 a zA Z0 9 2 32 u x 1F600 x 1F64F x 1F300 x 1F5FF x 1F680 x 1F6FF x 2600 x 26FF x 2700 x 27BF u
  • PHP使用PhpSpreadsheet库的操作Excel表格

    一 PhpSpreadsheet 介绍 PhpSpreadsheet是一个用纯PHP编写的库 提供了一组类 使您可以读取和写入不同的电子表格文件格式 PhpSpreadsheet提供了丰富的API接口 可以设置诸多单元格以及文档属性 包括样
  • 全国通用DNS服务器

    全国各地电信铁通DNS服务器地址 北京 202 96 199 133 202 96 0 133 202 106 0 20 202 106 148 1 202 97 16 195上海 202 96 199 132 202 96 199 133
  • JavaSE面试总结

    网络 反射 网络 OSI 的七层模型都有哪些 TCP与UDP区别 什么是三次握手四次挥手 socket编程 time wait状态如何产生 tcp为什么要三次握手 TCP如何保证可靠传输 什么是 TCP 粘包 它的产生原因以及解决方法 TC
  • 微信小程序 顶部自定义导航 “navigationStyle“: “custom“ 真机iPhone6/7/8不显示胶囊按钮

    微信小程序 顶部自定义导航 navigationStyle custom 要实现这种效果图 1 在哪个页面上实现自定义导航栏就在哪个页面的 json 文件中写上 navigationStyle custom 如果在app json写那就是所
  • 30多岁挨踢人要转行的焦虑,是真的吗

    30多岁挨踢人要转行的焦虑 是真的吗 从菜鸟到高级都在焦虑的一个问题 到了30多岁还没有做出点成就的话 就只能转行了 诸如做管理 创业开饭馆等等 我一直对此观点持保留态度 粗略看国内挨踢的发展历程 2000年出现第一次泡沫 往前推的话 有规
  • 2023,DaaS驶入“AI大航海时代”

    2023 制胜 已然成为所有行业 企业的共同命题 随着数字化行至中程 数据壁垒逐渐被打破 DaaS作为企业增长问题的解法 再次被看到 作者 斗斗 编辑 皮爷 出品 产业家 2002年 在竞争激烈的美国职业棒球联盟 奥克兰运动家队无论在人员和
  • 关于C的预编译 宏定义 的一些使用[不断积累中]

    头文件 防止重复包含 根据 define 和条件编译 ifdef ifndef else endif 最经常的使用是 头文件 防止重复包含 但是 使用 pragma once 更好 现在 gcc cl exe 都支持 它不但代码更少 而且不
  • 点云分割介绍

    PCL之点云的分割 参考博客 https www yuque com huangzhongqing pcl kg7wvi peMqz https blog csdn net lizhengze1117 article details 890
  • 股权投资模型-CAPM模型和PEG模型(内附示例数据)

    一 CAPM模型 1 数据来源 示例数据附在分享文件中 2 数据年份 2000 2019年 3 数据指标 资本资产定价模型 Capital Asset Pricing Model 简称CAPM 是由美国学者威廉 夏普 William Sha
  • @JsonView的使用

    看到一个新的注解以前没有用过 记录一下使用方法 注意是 com fasterxml jackson annotation JsonView JsonView可以过滤pojo的属性 使Controller在返回json时候 pojo某些属性不
  • Spring MVC基本操作

    Spring MVC 一 Spring MVC概述 1 1 Spring MVC 简介 MVC是一种常见的用户界面设计模式 设计套路 其实现方案有很多 Struts2 SpringMVC等等 MVC Model 数据模型 View 视图 C
  • Delete `␍`eslint(prettier/prettier) Expected linebreaks to be ‘LF‘ but found ‘CRLF‘错误的解决方案

    Delete eslint prettier prettier Expected linebreaks to be LF but found CRLF 错误的解决方案 执行 git config global core autocrlf f
  • 蓝桥杯备赛:贪心

    例题1 最少砝码 问题描述 你有一架天平 现在你要设计一套砝码 使得利用这些砝码可以称出任意 小于等于 NN 的正整数重量 那么这套砝码最少需要包含多少个砝码 注意砝码可以放在天平两边 输入格式 输入包含一个正整数 N 输出格式 输出一个整