Python贪心

贪心

  • 贪心:把整体问题分解成多个步骤,在每个步骤都选取当前步骤的最优方案,直至所有步骤结束;每个步骤不会影响后续步骤
  • 核心性质:每次采用局部最优,最终结果就是全局最优
  • 如果题目满足上述核心性质,则可以采用贪心进行求解

如何判断是否能用贪心?

  1. 最优子结构性质:当一个问题的最优解包含子问题的最优解,则称之为具有最优子结构性质。
  2. 贪心性质选择:可以通过局部最优的选择得到全局最优

具体问题如何做?

  1. 经验性积累各种类型的贪心
  2. 举反例

经典贪心

石子合并问题

石子合并问题:每次选择最小的两个

利用堆:heapq

题目描述

在很久很久以前,有 n n n 个部落居住在平原上,依次编号为 1 1 1 n n n。第 i i i 个部落的人数为 t i t_i ti

有一年发生了灾荒。年轻的政治家小蓝想要说服所有部落一同应对灾荒,他能通过谈判来说服部落进行联合。

每次谈判,小蓝只能邀请两个部落参加,花费的金币数量为两个部落的人数之和,谈判的效果是两个部落联合成一个部落(人数为原来两个部落的人数之和)。

输入描述

输入的第一行包含一个整数 n n n,表示部落的数量。

第二行包含 n n n 个正整数,依次表示每个部落的人数。

其中, 1 ≤ n ≤ 1000 , 1 ≤ t i ≤ 1 0 4 1≤n≤1000,1≤t_i≤10^4 1n10001ti104

输出描述

输出一个整数,表示最小花费。

import heapq
n = int(input())
a = list(map(int, input().split()))

# 把a转化为堆
heapq.heapify(a)
ans = 0
while len(a) >= 2:
    x = heapq.heappop(a)
    y = heapq.heappop(a)
    heapq.heappush(a, x + y)
    ans += x + y
print(ans)

分箱问题

每组最多两件,价值之和不超过 w w w

尽可能不浪费空间:大的和小的凑在一起

题目描述

元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完所有纪念品,乐乐希望分组的数目最少。

你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。

输入描述

1 1 1 行包括一个整数 w ( 80 ≤ w ≤ 200 ) w (80≤w≤200) w(80w200),为每组纪念品价格之和的上限。

2 2 2 行为一个整数 n ( 1 ≤ n ≤ 30000 ) n (1≤n≤30000) n(1n30000),表示购来的纪念品的总件数。

3 3 3~ n + 2 n+2 n+2 行每行包含一个正整数 p i ( 5 ≤ p i ≤ w ) p_i (5≤p_i≤w) pi(5piw),表示所对应纪念品的价格。

输出描述

输出一行,包含一个整数,即最少的分组数目。

w = int(input())
n = int(input())
a = []
for i in range(n):
    a.append(int(input()))

a.sort()
l, r = 0, n - 1
ans = 0

while True:
    if l == r:
        ans += 1
        break
    if l > r:
        break
    if a[l] + a[r] <= w:
        ans += 1
        l += 1
        r -= 1
    else:
        ans += 1
        r -= 1
print(ans)

翻硬币问题

题目描述

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

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

比如,可能情形是: ∗ ∗ o o ∗ ∗ ∗ o o o o **oo***oooo oooooo;

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

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

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

输入描述

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

每行的长度<1000。

输出描述

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

s = list(input())
t = list(input())
n = len(s)
ans = 0
for i in range(n):
    if s[i] == t[i]:
        continue
    if s[i + 1] == '*':
        s[i + 1] = 'o'
    else:
        s[i + 1] = '*'
    ans += 1
print(ans)

数组乘积问题

给定两个长度为 n n n 的正整数数组 a a a b b b,可以任意排序,求 ∑ i = 1 n a [ i ] ∗ b [ i ] \sum_{i=1}^{n}a[i]*b[i] i=1na[i]b[i] 的最小值

思路: a a a 从小到大, b b b 从大到小,然后对应元素相乘结果最小

参考个人博客:贪心

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

js逆向说明

一 负载的内容传输用这个格式 Content-Type: multipart/form-data Content-Type 是 HTTP 请求头中的一个字段&#xff0c;它告诉服务器请求体的类型。在这个例子中&#xff0c;Content-Type 的值为 multipart/form-data&#xff0c;这表示请求体采用了 multipart/form-data 格…

什么是负载均衡?NGINX是如何实现负载均衡的?

大家好&#xff0c;我是锋哥。今天分享关于【什么是负载均衡&#xff1f;NGINX是如何实现负载均衡的&#xff1f;】面试题。希望对大家有帮助&#xff1b; 什么是负载均衡&#xff1f;NGINX是如何实现负载均衡的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源…

spring boot学习第二十三篇:Spring Boot集成RocketMQ

前置条件先安装好RocketMQ 希望在Window10安装rocketMQ并简单使用&#xff0c;可以参考如下文章&#xff1a; Window10安装rocketMQ并简单使用-CSDN博客 1、pom.xml文件里面加上依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId&…

OpenCV基础:视频的采集、读取与录制

从摄像头采集视频 相关接口 - VideoCapture VideoCapture 用于从视频文件、摄像头或其他视频流设备中读取视频帧。它可以捕捉来自多种源的视频。 主要参数&#xff1a; cv2.VideoCapture(source): source: 这是一个整数或字符串&#xff0c;表示视频的来源。 如果是整数&a…

使用MATLAB正则表达式从文本文件中提取数据

使用MATLAB正则表达式从文本文件中提取数据 使用Python正则表达式从文本文件中提取数据的代码请看这篇文章使用正则表达式读取文本数据【Python】-CSDN博客 文本数据格式 需要提取 V 后面的数据, 并绘制出曲线. index 1V 0.000000W 0.000000E_theta 0.000000UINV 0.0…

Table-Augmented Generation(TAG):Text2SQL与RAG的升级与超越

当下AI与数据库的融合已成为推动数据管理和分析领域发展的重要力量。传统的数据库查询方式&#xff0c;如结构化查询语言&#xff08;SQL&#xff09;&#xff0c;要求用户具备专业的数据库知识&#xff0c;这无疑限制了非专业人士对数据的访问和利用。为了打破这一壁垒&#x…

怎样使自己处于高能量状态?

在忙碌的生活中&#xff0c;保持高能量状态很关键。以下是一些简单易行的方法。 一、原谅自己&#xff0c;放下过去 别总回想让自己尴尬或犯错的事&#xff0c;这样只会消耗能量。告诉自己“错了就改&#xff0c;别再想”&#xff0c;把精力放在当下和未来。 二、避免内耗&…

Linux高并发服务器开发 第十二天(阻塞/非阻塞 fcntl函数 位图 lseek函数 传入传出参数)

目录 1.阻塞和非阻塞 2.fcntl 函数 3.位图 4.lseek 函数 5.传入参数传出参数 5.1传入参数 5.2传出参数 5.3传入传出参数 1.阻塞和非阻塞 - 阻塞、非阻塞是 设备文件、网络文件具备的属性&#xff08;不是read、write的属性&#xff09;。 - 产生阻塞的场景&#xff1…

【C语言系列】函数递归

函数递归 一、递归是什么&#xff1f;1.1尾递归 二、递归的限制条件三、递归举例3.1举例一&#xff1a;求n的阶乘3.2举例二&#xff1a;顺序打印一个整数的每一位 四、递归与迭代4.1举例三&#xff1a;求第n个斐波那契数 五、拓展学习青蛙跳台问题 一、递归是什么&#xff1f; …

啥!GitHub Copilot也免费使用了

文章目录 前言免费版直接修复代码多文件上下文Agent模式总结 前言 最近&#xff0c;GitHub 给开发者们带来了一个好消息&#xff1a;他们的 AI 编程助手 GitHub Copilot 现在可以免费使用了&#xff01;以前&#xff0c;每个月要花 10 美元才能享受的服务&#xff0c;现在对所…

【OpenGL/Assimp】渲染模型、半透明材质与封装光源

文章目录 渲染成果Assimp库准备&#xff1a;Mesh类修改&#xff1a;透明贴图使用&#xff1a;光源封装&#xff1a;使用方式在如下测试环境中&#xff1a; 渲染成果 Assimp库准备&#xff1a; 从GitHub拉取源码&#xff0c;根据网络教程&#xff0c;借助CMake生成VS工程项目&a…

【数据结构高阶】B-树

目录 一、常见的搜索结构 二、B树 2.1 B树的概念 2.2 B树插入数据的分析 2.3 B树的性能分析 2.4 模拟实现B树 2.4.1 B树节点的定义 2.4.2 B树数据的查找 2.4.3 B树节点的数据插入 2.4.4 B树的遍历 2.4.5 模拟实现B树实现的完整代码 三、B树 3.1 B树的概念 3.2 B树…

人才选拔中,如何优化面试流程

在与某大型央企的深入交流中&#xff0c;随着该企业的不断壮大与业务扩张&#xff0c;对技术人才的需求急剧上升&#xff0c;尽管企业加大了招聘力度并投入了大量资源&#xff0c;但招聘成效却不尽如人意。经过项目组细致调研与访谈&#xff0c;问题的根源逐渐浮出水面&#xf…

【Bluedroid】HFP连接流程源码分析(一)

connect /packages/modules/Bluetooth/system/btif/src/btif_hf_client.cc static bt_status_t connect(const RawAddress* bd_addr) {log::verbose("HFP Client version is {}", btif_hf_client_version);CHECK_BTHF_CLIENT_INIT(); // 检查HFP客户端是否已初始化…

Shader->LinearGradient线性渐变着色器详解

XML文件 <com.example.myapplication.MyViewxmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_gravity"center"android:layout_height"400dp"/>自定义View代码 c…

【芯片封测学习专栏 -- 单 Die 与 多Die(Chiplet)介绍】

请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 Overview单个Die&#xff08;Monolithic Die&#xff09;多个Die&#xff08;Chiplet Architecture or Heterogeneous SoC&#xff09;如何判断一个SoC是…

acwing_5722_十滴水

acwing_5722_十滴水 下面这篇大佬的题解属实是把指针用明白了&#xff0c;可以好好理解一下&#xff1a; 原题解连接&#xff1a;AcWing 5722. 一个简单模拟实现 - AcWing map/unordered_map的用法:见收藏夹 #include<iostream> #include<unordered_map> #incl…

零基础学AI大模型要多久?真的能学会吗?

很多人都对学习AI大模型抱有疑问&#xff0c;特别是那些完全没有编程基础的朋友。其实&#xff0c;从零开始学习AI大模型是可以做到的&#xff0c;关键在于你的学习方法和投入的时间。下面我们来详细聊一聊这个问题。 学习时间 自学&#xff1a; 如果你选择自学&#xff0c;…

攻防靶场(34):隐蔽的计划任务提权 Funbox1

目录 1. 侦查 1.1 收集目标网络信息&#xff1a;IP地址 1.2 主动扫描&#xff1a;扫描IP地址段 1.3 搜索目标网站 2. 初始访问 2.1 有效账户&#xff1a;默认账户 2.2 利用面向公众的应用 2.3 有效账户&#xff1a;默认账户 3. 权限提升 3.1 计划任务/作业&#xff1a;Cron 靶场…

Java高频面试之SE-11

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本牛马baby今天又来了&#xff01;哈哈哈哈哈嗝&#x1f436; Java中是引用传递还是值传递&#xff1f; 在 Java 中&#xff0c;方法参数传递是通过 值传递 的方式实现的&#xff0c;但这可能会引起一…